2015-02-06 102 views
3

我想追加一個文件到tar文件。例如,test.tar.gz中的文件是a.png, b.png, c.png。我有一個名爲a.png的新PNG文件,我想追加到a.pngtest.tar.gz,並覆蓋中的舊文件a.png。我的代碼:如何將文件追加到tar文件使用python tarfile模塊?

import tarfile 
a = tarfile.open('test.tar.gz', 'w:gz') 
a.add('a.png') 
a.close() 

然後,所有的文件test.tar.gz disappeard但a.png,如果我我的代碼改成這樣:

import tarfile 
a = tarfile.open('test.tar.gz', 'a:')# or a:gz 
a.add('a.png') 
a.close() 

程序崩潰,錯誤日誌:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/tarfile.py", line 1678, in open 
    return func(name, filemode, fileobj, **kwargs) 
    File "/usr/lib/python2.7/tarfile.py", line 1705, in taropen 
    return cls(name, mode, fileobj, **kwargs) 
    File "/usr/lib/python2.7/tarfile.py", line 1588, in __init__ 
    raise ReadError(str(e)) 
tarfile.ReadError: invalid header 

我的錯誤是什麼?我該怎麼做?

回答

4

tarfile documentation

注意'a:gz''a:bz2'是不可能的。如果模式不適合打開某個(壓縮)文件進行讀取,則會引發ReadError。使用模式'r'來避免這種情況。如果不支持壓縮方法,則會引發CompressionError

所以我猜你應該使用gzip library解壓,在tarfile添加使用a:模式的文件,然後使用gzip壓縮一次。

+1

好的,我明白了。當我閱讀python文檔時忽略了筆記。 – 2015-02-06 09:14:05

+1

有誰知道這是爲什麼? append.gz是否存在一些內在的數據保真度問題,還是沒有人將它添加到Python模塊? – user1717828 2017-05-16 12:05:52