2013-04-02 190 views
1

我想讀取包含頭部分(文本)和數字數組的二進制數據文件。我可以使用f.read(block_size)在頭部保持流式傳輸,但讀取數字數組的最佳方式是什麼?使用python從二進制文件中讀取數字數據

在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) 

,從這裏我不知道怎麼去數字陣列。

回答

2

您可以使用struct.unpack來解開數字數據。

例如

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數組的細節。這是一個稍微不同的問題,但其中的很多答案也適用於此(如何指定字節順序等)

相關問題