2010-10-06 31 views
3

我正在創建壓縮文件/文件夾的Python軟件......我將如何創建一段要求輸入文件夾位置的用戶然後進行壓縮的代碼。我目前有一個文件的代碼,但不是文件夾的文件。請詳細解釋如何做到這一點。如何使用Python GZip模塊壓縮文件夾?

+0

是不是gzip應該只做壓縮,不歸檔?難道你不應該在看焦油嗎? – 2010-10-06 16:43:22

回答

6

GZip不會壓縮文件夾/目錄,只會壓縮單個文件。改用zipfile模塊。

0

正如larsmans所說,gzip壓縮不用於目錄,只用於單個文件。使用linux的常用方法是將目錄放在tarball中,然後壓縮。

+1

值得一提的是,當你壓縮和壓縮時,你可以獲得更好的壓縮效果,而不是單獨壓縮每個文件。 – synthesizerpatel 2010-10-06 17:32:04

5

我不做UI,所以你自己從用戶那裏獲取文件夾名稱。這是一種製作gz壓縮tarfile的方法。它確實不是遞歸子文件夾,你需要像os.walk()那樣的東西。

# assume the path to the folder to compress is in 'folder_path' 

import tarfile 
import os 

with tarfile.open(folder_path + ".tgz", "w:gz") as tar: 
    for name in os.listdir(folder_path): 
     tar.add(name) 
+0

其實你可以直接寫'tar.add(folder_path)',它會被遞歸地添加。 (當然,這可能是自發布此答案以來的五年中添加的一項新功能!)另外,for循環不應該在這裏縮進,除非將tar = tarfile.open(...)更改爲'用tarfile.open(...)作爲tar:'(這是一個好主意,然後你可以去除'tar.close()'行)。 – 2015-11-26 11:20:54

+0

謝謝,不知道如何縮進錯誤存活了5年。 – 2015-11-28 19:42:02

10

到一個文件夾中壓縮到tar文件中的代碼是:

import tarfile 

tar = tarfile.open("TarName.tar.gz", "w:gz") 
tar.add("folder/location", arcname="TarName") 
tar.close() 

這對我的作品。希望也適合你。