我想阅读.pyc
文件。但是,我找不到关于格式的任何文档。
{3}}对Python 3不起作用(尽管它适用于Python 2):
>>> f = open('__pycache__/foo.cpython-34.pyc', 'rb')
>>> f.read(4)
b'\xee\x0c\r\n'
>>> f.read(4)
b'\xf8\x17\x08W'
>>> marshal.load(f)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: bad marshal data (unknown type code)
marshal只消耗一个字节:\x00
,这确实不是马歇尔的有效第一个字符(作为比较,同一个空模块的Python 2字节码的第一个字节是c
)< / p>
那么,如何解码标题之后的内容呢?
答案 0 :(得分:3)
试试这个。它工作了一段时间。他们在v3中添加了另一个int32。
def load_file(self, source):
if isinstance(source, str):
import os.path
if not os.path.exists(source):
raise IOError("Cannot load_file('"
+ source
+ "'): does not exist")
with open(source, "rb") as fh:
header_bytes = fh.read(12)
# ignore header
self.code = marshal.load(fh)
return self.code
答案 1 :(得分:0)