我需要从Python导入一个二进制文件 - 内容是带符号的16位整数,大端.
以下Stack Overflow问题建议如何一次拉入几个字节,但这是扩展读取整个文件的方法吗?
我想创建一个像以下的函数:
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')
Run Code Online (Sandbox Code Playgroud)
但这很慢(文件是165924350字节).有没有更好的办法?
我会直接读取直到 EOF(这意味着检查是否接收到空字符串),然后不再需要使用 range() 和 getsize。
或者,使用xrange(而不是range)应该可以改善情况,特别是对于内存使用而言。
此外,正如 Falmarri 所建议的,同时读取更多数据会大大提高性能。
也就是说,我不会期待奇迹,也是因为我不确定列表是存储所有数据量的最有效方法。
使用 NumPy 的数组及其工具来读/写二进制文件怎么样?在此链接中有一个关于使用 numpyio.fread 读取原始二进制文件的部分。我相信这应该正是您所需要的。
注意:就我个人而言,我从未使用过 NumPy;然而,它的主要存在理由正是处理大数据集 - 这就是你在问题中所做的。