我的任务是手动读取 7z 档案,而不使用 7z 实用程序。它们似乎是使用默认设置创建的,因此很可能版本 4 档案中的数据是使用 LZMA2 算法压缩的(在版本 3 档案中,显然是使用 LZMA1 算法),并且元数据在 LZMA1 中压缩(根据文档)。
使用科学戳方法,我设法从一些(但由于某种原因不是全部)档案中读取数据:
import lzma
with open('archive.7z', 'rb') as fp:
fp.seek(32) # Пропускаем 7z-заголовок
data = lzma.LZMAFile(fp, format=lzma.FORMAT_RAW, filters=[{"id": lzma.FILTER_LZMA2}]).read()
但是,我不知道如何读取元数据。(是否应用了任何特殊过滤器?)
你能告诉我它们是如何编码的以及需要为 lzma 解压缩器设置哪些参数才能读取元数据吗?