我想读取包含标题部分(文本)然后是数字数组的二进制数据文件。我可以使用f.read(block_size)在标题部分保持流式传输,但读取数值数组的最佳方法是什么?
在MatLab中,我可以做到
fid = fopen(data_file_name, 'rb');
line = fread(fid, block_size, '*char');
data = fread(fid, 'long');
在Python中,我所做的是
f = open(data_file_name, 'rb')
header = f.read(block_size)
从这里我不知道怎么去数字数组。
答案 0 :(得分:3)
您可以使用struct.unpack
解包数字数据。
e.g。
with open('file','rb') as fin:
header = fin.read(header_size)
data_str = fin.read(num_data_bytes)
data_tuple = struct.unpack('100f',data_str) #100 4-byte floats
根据数据,您可以使用numpy.fromfile
将其直接读取到numpy数组。该函数接受一个打开的文件对象,因此您可以读取标题然后传递打开的文件对象,因此numpy可以读取数据。在this question中,我询问了将字符串中的二进制数据读入numpy数组的详细信息。这是一个稍微不同的问题,但是大部分答案也适用于此(如何指定字节顺序等)。