加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

简单阅读fortran二进制数据在python中并不那么简单

发布时间:2020-12-20 12:29:26 所属栏目:Python 来源:网络整理
导读:我有FORTRAN代码的二进制输出文件.想在 python中阅读它. (使用FORTRAN读取并输出文本以读取python不是一个选项.长篇故事.)我可以以简单的方式阅读第一条记录: binfile=open('myfile','rb') pad1=struct.unpack('i',binfile.read(4))[0] ver=struct.unpack('
我有FORTRAN代码的二进制输出文件.想在 python中阅读它. (使用FORTRAN读取并输出文本以读取python不是一个选项.长篇故事.)我可以以简单的方式阅读第一条记录:

>>> binfile=open('myfile','rb')
>>> pad1=struct.unpack('i',binfile.read(4))[0]
>>> ver=struct.unpack('d',binfile.read(8))[0]
>>> pad2=struct.unpack('i',binfile.read(4))[0]
>>> pad1,ver,pad2
(8,3.13,8)

正好.但这是一个大文件,我需要更有效地做到这一点.所以我尝试:

>>> (pad1,pad2)=struct.unpack('idi',binfile.read(16))

这不会运行.给我一个错误并告诉我解压缩需要一个长度为20的参数.这对我来说没有意义,因为我上次检查时,4 8 4 = 16.当我输入并用16替换16时,它会运行,但这三个数字都填充了数字垃圾.有谁看到我做错了什么?谢谢!

解决方法

你得到的大小是由于对齐,尝试struct.calcsize(‘idi’)来验证对齐后大小实际为20.要使用没有对齐的本机字节顺序,请指定struct.calcsize(‘= idi’)并使其适应您的示例.

有关struct模块的更多信息,请查看http://docs.python.org/2/library/struct.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读