2010-02-12 77 views
1

我正在開發一個Python腳本,該腳本應該處理一個tarball並輸出新腳本,並嘗試保留原始格式。因此,我正在尋找一種方法來查找打開的壓縮包中使用的壓縮方法,以相同的壓縮率打開新壓縮方法。tarfile:確定打開壓縮包的壓縮

AFAICS TarFile類不提供任何公共接口來直接獲取所需的信息。我想避免獨立於tarfile模塊讀取文件。

我目前正在考慮查找基礎文件對象(t.fileobj.__class__)的類或試圖以所有可能的模式打開輸入文件,並根據哪個模式成功選擇正確的格式。

回答

2

好吧,我找到了一個更好的解決方案。

f = t.fileobj.__class__(newfn, 'w') 
1

tar不壓縮,它連接(這就是爲什麼TarFile不會告訴你使用什麼壓縮方法,因爲沒有一個)。

你想知道它是tar.gz,tar.bz2還是tar.Z?

1

當您打開tarfile時,您可以選擇模式。來自docs

如果模式不適合打開某個(壓縮)文件進行讀取,則會引發ReadError。

那麼爲什麼不嘗試打開文件作爲.gz,.bz2等,每次捕獲異常?打開時沒有異常的告訴你想要複製的壓縮類型。