python - 使用python从二进制文件中读取数字数据

标签 python file-io binary

我想读取一个二进制数据文件,其中包含标题部分(文本),然后是数字数组。我可以使用 f.read(block_size) 来保持 header 部分中的流式传输,但是读取数值数组的最佳方法是什么?

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

从这里我不知道如何访问数字数组。

最佳答案

您可以使用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数组中。该函数接受一个打开的文件对象,因此您可以读取 header ,然后将打开的文件对象传递给 numpy,以便 numpy 可以读取数据。在 this question ,我询问了从字符串读取二进制数据到 numpy 数组的细节。这是一个略有不同的问题,但其中的大部分答案也适用于这个问题(如何指定字节顺序等)

关于python - 使用python从二进制文件中读取数字数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15767163/

相关文章:

python - thread.interrupt_main() 在等待输入时不起作用

c++ - 用C++解析文件并将其写入表格中的HTML

java - 如何将 DOM 文档写入文件?

c++ - 我可以在 C 或 C++ 中使用二进制文字吗?

python - 正则表达式我想匹配直到某些字符,但如果没有这些字符仍然能够匹配字符串

python - Pytest 无法注册命令行参数

python - 找不到 PIL group4 解码器

c - 使用 C 从文本文件中打印出数组

Python:如何制作标准大小为 6 的 struct.calcsize 整数?

java - 为什么我的十进制转二进制程序会在末尾添加额外的数字?