用PyLZMA解​​压缩

时间:2012-06-12 21:41:44

标签: python compression zip lzma

我使用此脚本压缩文件

import pylzma, struct
i = open(path+fileName,'rb')
o = open(path+zipName+'.zip','wb')
data = i.read()
c = pylzma.compressfile(data, eos=1)
result = c.read(5)
result += struct.pack('<Q', len(data))
o.write(result + c.read())
i.close()
o.close()

我使用PyLZMA documentation中显示的方法,因为它允许我的文件被7zip或lzma.exe读取。使用7zip进行解压缩工作正常,但是当我使用PyLZMA时它不起作用。我用这个:

i = open(path+name+'.zip', 'rb')
o = open(path+name, 'wb')
data = i.read()
u = pylzma.decompress(data)
o.write(u)

它在pylzma.decompress上停止,我收到以下错误:

  

TypeError:解压缩时出错:1

1 个答案:

答案 0 :(得分:3)

如果我正确地阅读documentation(我在安装PyLZMA时遇到问题,因此我无法验证),compress()会输出decompress()可以处理的字符串。

但是,为了使压缩字符串与其他实用程序兼容,必须在前5个字节和其余压缩数据之间插入8字节长度。

因此,如果你想使用PyLZMA解​​压缩数据,我怀疑你需要手动删除那个8字节长度的字段(最快的方法可能是打开输入文件,读取5个字节,跳过8,然后读取文件的其余部分)。