如何在Python中将空字符串添加到tgz文件的末尾

时间:2016-12-12 17:46:44

标签: python

我在命令下运行,将空字符串添加到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

1 个答案:

答案 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()