python二进制文件 删除尾部数据_在Python中读取和切片二进制数据文件的最快方法...

我有一个处理脚本,用于提取“uint16”类型的二进制数据文件,并一次以6400块的形式进行各种处理.该代码最初是用Matlab编写的,但由于分析代码是用 Python编写的,我们希望通过在Python中完成所有工作来简化流程.问题是我注意到我的Python代码比Matlab的fread函数慢得多.

简单地说,Matlab代码是这样的:

fid = fopen(filename);

frame = reshape(fread(fid,80*80,'uint16'),80,80);

虽然我的Python代码很简单:

with open(filename, 'rb') as f:

frame = np.array(unpack("H"*6400, f.read(12800))).reshape(80, 80).astype('float64')

文件大小从500 MB变化很大 – > 400 GB所以我相信找到一种更快的方法来解析Python中的数据可以为较大的文件带来好处. 500 MB通常具有~50000个块,并且该数量随文件大小线性增加.我看到的速度差异大致是:

Python = 4 x 10^-4 seconds / chunk

Matlab = 6.5 x 10^-5 seconds / chunk

处理显示随着时间的推移,Matlab比我实现的Python方法快约5倍.我已经探索了诸如numpy.fromfile和numpy.memmap之类的方法,但是因为这些方法需要在某些时候将整个文件打开到内存中,所以它限制了用例,因为我的二进制文件非常大.有没有一些pythonic方法可以做到这一点,我错过了?我本以为Python在打开阅读二进制文件方面会非常快.任何意见是极大的赞赏.

最佳答案 将块写入文件:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值