我在命令下运行,将空字符串添加到tgz文件中,以便我可以获得新的sha256总和;
cat orginal.tgz <(echo ''| gzip)> modified.tgz
$sha256sum *.tgz
3b49d79af670d0aea9d1e0ead2f512ad107d54b657df6ecb60a1b13ef796cb66 modified.tgz
574ddb9b269bc2e69fffff81c2f29d932d3fd95e4c9ca1ed259517ac83b1421a orginal.tgz
我可以解决modified.tgz文件没有任何问题;现在我写了这个简单的python程序来做同样的事情。
with open("new.tgz", "w") as outfile:
with open("orginal.tgz", "r") as infile:
buff = infile.read()
outfile.write(buff)
outfile.write(' ')
我可以看到new.tgz文件的不同sha256sum,但是没有解压缩以下错误
$ sha256sum *.tgz
3b49d79af670d0aea9d1e0ead2f512ad107d54b657df6ecb60a1b13ef796cb66 modified.tgz
574ddb9b269bc2e69fffff81c2f29d932d3fd95e4c9ca1ed259517ac83b1421a orginal.tgz
0458bb8342faf0482739069a1a70aef89d32fb9336f2f7926dfe6d54a0dc6cc1 new.tgz
$ tar -xvf new.tgz
google.txt
gzip: stdin: unexpected end of file
tar: Child returned status 1
tar: Error is not recoverable: exiting now
答案 0 :(得分:1)
你在linux命令中做的是向tgz添加一个空字符串的文件。你在python中做的是修改tgz文件本身。
您无法直接更新tgz。您需要向其添加文件。使用像tar这样的库,并使用空字符串创建一个文件并将其添加到其中:
archive = tarfile.open("original.tgz", "w|gz")
archive.add(empty_file_path, arcname=empty_file_path)
archive.close()