我需要从Python导入一个二进制文件——内容是有符号的16位整数,big endian。
下面的堆栈溢出问题建议如何一次拉入几个字节,但这是一种放大到整个文件中读取的方法吗?
我想创建一个函数,比如:
from numpy import *
import os
def readmyfile(filename, bytes=2, endian='>h'):
totalBytes = os.path.getsize(filename)
values = empty(totalBytes/bytes)
with open(filename, 'rb') as f:
for i in range(len(values)):
values[i] = struct.unpack(endian, f.read(bytes))[0]
return values
filecontents = readmyfile('filename')
但这相当慢(文件是165924350字节)。有更好的办法吗?
我会直接读到EOF(这意味着检查是否接收到空字符串),然后不再需要使用range()和getsize。
或者,使用
xrange
(而不是range
)应该可以改进一些东西,特别是对于内存使用来说。此外,正如falmari所建议的那样,同时读取更多的数据将大大提高性能。
也就是说,我不会期待奇迹的出现,因为我不确定一个列表是存储所有这些数据的最有效方法。
使用NumPy的数组及其工具来read/write binary files怎么样?在这个link中,有一节是关于使用numpyio.fread读取原始二进制文件的。我相信这正是你所需要的。
注:就我个人而言,我从来没有使用过NumPy;然而,它的主要目的恰恰是处理大数据集——这就是你在问的问题。
使用
numpy.fromfile
。一次读取和解包两个字节
为什么不一次读1024字节呢?
相关问题 更多 >
编程相关推荐