2012-04-05 103 views
3

我可以以這種方式計算的tar文件的文件大小:Python的tar文件大小

import tarfile 
tf = tarfile.open(name='my.tgz', mode='r') 
reduce(lambda x,y: getattr(x, 'size', x)+getattr(y,'size',y), tf.getmembers()) 

,但返回的總規模在tar文件,而不是壓縮文件大小的元素的總和(以至少這是我相信通過嘗試這一點)。 有沒有辦法通過像os.path.getsize這樣的東西來檢查整個tar文件的壓縮大小?

+1

「os.path.getsize」有什麼問題? – orlp 2012-04-05 12:20:54

回答

2

的方式tar.gz的作品是該文件通過管道輸送的gzip獲得一個普通的tar歸檔。 tar(1)不知道壓縮文件是在第一位,所以它不知道壓縮大小[*]。

這不像ZIP壓縮自己的檔案格式。

tar方法的優點是可以使用任何你喜歡的壓縮。如果有更好的壓縮器出現,您可以輕鬆地重新包裝您的檔案。另外,因爲所有東西都放在一個大的數據流中,所以壓縮比稍微好一點,元數據如文件名也被壓縮。

缺點是您必須在存檔文件中尋找解壓單個項目。 [*]:tar(1)的第一個實現沒有-z選項;當人們開始大量使用gzip時,它被添加了。在早期,標準壓縮使用compress得到tar.Z

+1

謝謝你的回答。我發現的解決方案是使用文件對象和st_size參數來獲取大小。 – Cinquo 2012-04-10 08:16:13