Я экспериментирую с модулем lzma в Python 2.7.6, чтобы посмотреть, смогу ли я создавать сжатые файлы с использованием формата 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()
и я заметил, что в результирующем файле были две разные контрольные суммы (MD5 и SHA256) по сравнению с тем, когда я использовал простой xz (хотя я мог нормально распаковать любой метод - контрольные суммы распакованных версий обоих файлов были одинаковыми). Будет ли это проблемой?
ОБНОВЛЕНИЕ: я нашел исправление, установив backport (из Python 3.3) через Git-репозиторий peterjc (ссылка здесь), и теперь он показывает идентичные контрольные суммы. Не уверен, что это поможет, но я убедился, что модуль 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 (когда я записывал данные в файл).
out_file
. - person Peter Gibson   schedule 13.03.2014