我正在尝试使用 Python 2.7.6 中的 lzma 模块,看看我是否可以使用 XZ 格式为将来使用它的项目创建压缩文件。我在实验中使用的代码是:
import lzma as xz
in_file = open('/home/ki2ne/Desktop/song.wav', 'rb')
input_data = in_file.read()
compressed_data = xz.compress(input_data)
out_file = open('/home/ki2ne/Desktop/song.wav.xz', 'wb')
in_file.close()
out_file.close()
我注意到与我使用普通 xz 时相比,生成的文件有两个不同的校验和(MD5 和 SHA256)(尽管我可以用任何一种方法解压缩 - 两个文件的解压缩版本的校验和是相同的)。这会是个问题吗?
更新:我通过 peterjc 的 Git 存储库(链接此处)安装后向端口(来自 Python 3.3)找到了解决方法,现在它显示了相同的校验和。不确定它是否有帮助,但我确保未安装我的存储库中的 LZMA Python 模块以避免可能的名称冲突。
这是我的测试代码来确认这一点:
# I have created two identical text files with some random phrases
from subprocess import call
from hashlib import sha256
from backports import lzma as xz
f2 = open("test2.txt" , 'rb')
f2_buf = buffer(f2.read())
call(["xz", "test1.txt"])
f2_xzbuf = buffer(xz.compress(f2_buf))
f1 = open("test1.txt.xz", 'rb')
f1_xzbuf = buffer(f1.read())
f1.close(); f2.close()
f1sum = sha256(); f2sum = sha256()
f1sum.update(f1_xzbuf); f2sum.update(f2_xzbuf)
if f1sum.hexdigest() == f2sum.hexdigest():
print "Checksums OK"
else:
print "Checksum Error"
我还使用常规的 sha256sum 验证了它(当我将数据写入文件时)。