如何在Python中以类似C的方式读取文件头?

6 投票
2 回答
4637 浏览
提问于 2025-04-15 18:09

我刚开始学习Python,之前是做C语言程序员的。我有一个文件,它的开头有一些特定的数据,我需要提取这些数据。比如,字节0到5是一个魔数,字节6到8是偏移量等等。

在C语言中(举个例子):

struct {  
   int32_t payload_offset,  
   int32_t len,  
   char *magic,  
   int32_t type  
   int32_t header_size  
} file_hdr;  

然后在我的函数里,我这样做:

file_hdr *hdr;
ptr = &hdr;
fd = open(path_to_file, "r");
num_read =  read(fd, ptr, bytes). 

这样我就可以像这样访问头部数据,比如ptr->type,ptr->magic等等。

我该如何在Python中实现类似的效果呢?因为Python的变量没有类型,访问文件头部数据的最佳方法是什么?

我需要用到这些头部数据来做一些决策。

提前谢谢大家。

2 个回答

3

这通常是通过Python中的struct模块来完成的。这个模块可以让你从打包的二进制数据中提取出值,提取的方式是根据你提供的格式说明字符串。

你需要先用二进制输入输出的方式把数据加载到一个字符串中,然后再使用struct.unpack()来解包这些数据。

7

一种方法是使用Python的struct模块,相关文档可以在这里找到。
如果你需要更强大的功能,另一个选择是使用很棒的construct库,它不仅可以做上面提到的事情,还有更多其他功能。

撰写回答