python-读取大的big-endian二进制文件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-读取大的big-endian二进制文件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1122字,纯文字阅读大概需要2分钟。
内容图文
![python-读取大的big-endian二进制文件](/upload/InfoBanner/zyjiaocheng/684/689393cc7d85453eb00ad0ee50e4d4ad.jpg)
我有一个很大的big-endian二进制文件.我知道这个文件中有多少个数字.我找到了一个使用struct读取big-endian文件的解决方案,如果文件很小,它可以完美地工作:
data = []
file = open('some_file.dat', 'rb')
for i in range(0, numcount)
data.append(struct.unpack('>f', file.read(4))[0])
但是,如果文件大小超过100 mb,此代码将非常缓慢地工作.
我当前的文件大小为1.5gb,包含399.513.600浮点数.上面的代码使用此文件大约需要8分钟.
我找到了另一个解决方案,它的运行速度更快:
datafile = open('some_file.dat', 'rb').read()
f_len = ">" + "f" * numcount #numcount = 399513600
numbers = struct.unpack(f_len, datafile)
这段代码大约需要1.5分钟才能运行,但这对我来说太慢了.早些时候,我在Fortran中编写了相同的功能代码,并且运行了大约10秒钟.
在Fortran中,我用标志“ big-endian”打开文件,我可以直接读取REAL数组中的文件而无需任何转换,但是在python中,我必须将文件读取为字符串,并使用struct转换float中的每4位.是否可以使程序运行更快?
解决方法:
您可以使用numpy.fromfile读取文件,并指定类型为big-endian,并指定>在dtype参数中:
numpy.fromfile(filename, dtype='>f')
也有一个array.fromfile方法,但是不幸的是,我看不到任何可以控制字节序的方法,因此,根据您的用例,这可能避免依赖第三方库或变得无用.
内容总结
以上是互联网集市为您收集整理的python-读取大的big-endian二进制文件全部内容,希望文章能够帮你解决python-读取大的big-endian二进制文件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。