我有一些包含4个字节整数的二进制文件(有些可能很大(100MB))。
任何人都可以提供代码片段来展示如何提取每个4字节整数,直到文件结束?使用Python 2.7。
由于
答案 0 :(得分:11)
您可以使用struct.unpack()
:
with open(filename, 'rb') as fileobj:
for chunk in iter(lambda: fileobj.read(4), ''):
integer_value = struct.unpack('<I', chunk)[0]
这使用<I
将字节解释为little-endian无符号整数。根据需要调整格式; { - 1}}表示big-endian,>
表示签名整数。
如果您需要一次性读取大量整数值并知道需要阅读的数量,请同时查看array
module:
i
如果文件的结尾与您的系统不匹配,则需要使用array.byteswap()
:
from array import array
arr = array('L')
with open(filename, 'rb') as fileobj:
arr.fromfile(fileobj, number_of_integers_to_read)
答案 1 :(得分:4)
查看NumPy fromfile
function。您提供了有关要读取的数据的简单类型注释,并且该函数有效地将其读入NumPy ndarray
对象。
import numpy as np
np.fromfile(file_name, dtype='<i4')
您也可以更改dtype
以反映大小和字节顺序。 See here for some examples.