2016-10-02 31 views
-1

我正在研究一個python腳本,它將使用zipfileos將文件夾及其所有內容添加到zip文件。TypeError:強制爲Unicode:需要字符串或緩衝區,找到列表:如何創建循環

z = ZipFile("mynewfile.zip", "w") 
z.write(os.walk(directory)) 
z.printdir() 
z.close() 

不幸的是,我發現,這是使用os.walk,這會導致錯誤時考慮的列表:

TypeError: coercing to Unicode: need string or buffer, list found: how to create a loop 

在此錯誤環顧四周,我想我需要一個循環來循環每項目在列表中。我的問題是,我無法弄清楚如何爲我的特定需求翻譯以前的答案。 e.g TypeError: coercing to Unicode: need string or buffer, list found

我也曾嘗試

for root dirs files in os.walk(directory) 
    z.write(files) 

這也導致出現同樣的錯誤。

但是使用

for root dirs files in os.walk(directory) 
    z.write(root) 

顯示該目錄中的所有文件夾,但沒有文件。我不知道爲什麼這不算列表。

我想我需要以某種方式結合這兩個想法,這樣做的任何幫助將大大appeciated。

+0

如果'files'是一個列表,那麼爲什麼不只是有第二個(內部)for循環遍歷該列表的所有元素? (也沒有你發佈的例子有實際有效的語法) – UnholySheep

回答

0

下面的代碼應該這樣做。由於文件是一個列表。您只需遍歷該列表並將文件名寫入zip文件即可。在下面的代碼中,我也使用上下文管理器with,我不需要手動關閉文件,因爲它爲我做了這些。

from zipfile import Zipfile 

for root, dirs, files in os.walk(directory): 
    for f in files: 
     with Zipfile('new_zip.zip', 'w') as z: 
      z.write(f) 
相關問題