2015-10-12 36 views
0

我在代碼中丟失了什麼(#代替註釋行中的代碼行)將test.py文件存檔在zip文件夾中?在python中創建zip檔案

#!/usr/bin/python 
import zipfile,os 
path='/home/user/Desktop' 

def zipdir(path, zipf): 
    for file in os.walk(path): 
    #zipf.write(os.path.join(root,path)) 




if __name__ == "__main__": 

    zipf = zipfile.ZipFile('test.zip', 'w') 
    zipdir(path, zipf) 
    zipf.close() 
+2

http://stackoverflow.com/questions/1855095/how-to-create-a-zip-目錄歸檔 – user1514631

+0

@ user1514631爲什麼在這個問題中寫入了root而不是path,在os.path.join裏面?你可以向我解釋這部分嗎? – commandos2389

+0

os.walk(path)返回一個元組列表,該元組的第一個元素是當前目錄(一些調用root,並且這個目錄會隨着os.walk進入目錄而改變),通過加入當前的根目錄文件名,您可以獲得當前文件的完整路徑名。鏈接答案中的「變量」路徑是os.walk開始的起始目錄。爲了更好地理解,只需在您的zipdir函數中打印根目錄,目錄,文件,這樣您就可以看到發生了什麼。 – user1514631

回答

1

的問題是,你不拆包由os.walk()函數返回的所有變量,所以你告訴程序壓縮元組,而不是路徑。你必須要在zipdir()功能的以下變化:

def zipdir(path, ziph): 
    for root, dirs, files in os.walk(path): 
     for file in files: 
      ziph.write(os.path.join(root,file)) 

檢查以下答案:How to create a zip archive of a directory

+0

爲什麼在這個答案(在你提供給我的鏈接上)寫的是root而不是路徑,在os.path.join裏面?你可以更好地解釋我這部分,我不明白嗎? – commandos2389

+0

對不起,這是來自我的代碼,當我用不同的變量運行我的電腦時。正確的表達式是'ziph.write(os.path.join(path,file))'。這個函數基本上建立了目錄中每個文件的整個路徑。 'os.walk()'返回一個由三個元素組成的元組。第一個是目錄的完整路徑,第二個是目錄內的子目錄,第三個是文件名。要做zip文件,你必須爲每個文件提供完整的路徑,這就是爲什麼你必須「加入」目錄('root')到'file'的路徑。我確定了我的答案;) –