我在使用Python中的zipfile構建的壓縮文件時遇到問題。我遍歷目錄中的所有文件並將它們寫入存檔。當我試圖提取它們後,我得到一個與路徑分隔符相關的異常。無法解壓使用zipfile構建的壓縮文件(Python)
the_path= "C:\\path\\to\\folder"
zipped= cStringIO.StringIO()
zf = zipfile.ZipFile(zipped_cache, "w", zipfile.ZIP_DEFLATED)
for dirname, subdirs, files in os.walk(the_path) :
for filename in files:
zf.write(os.path.join(dirname, filename), os.path.join(dirname[1+len(the_path):], filename))
zf.extractall("C:\\destination\\path")
zf.close()
zipped_cache.close()
這裏的例外:
zipfile.BadZipfile:在 目錄 「ENV \指數」 和頭 「ENV /索引」 文件名不同。
更新:我更換了字符串緩衝區cStringIO.StringIO()
有一個臨時文件(tempfile.mkstemp("temp.zip")
),現在它的工作原理。當zipfile模塊寫入緩衝區破壞歸檔文件時會發生這種情況,但不確定問題是什麼。
問題是我正在從/中讀取/寫入以「r」/「w」模式而不是「rb」/「wb」打開的文件中的信息。這在Linux中不是問題,但由於字符編碼的原因,它在Windows中出現錯誤。解決了。
發佈例外,傻! – dkamins 2011-05-19 19:33:39
我只給出了這些例子,路徑正確地形成,並帶有反斜槓('C:\\ path \\到\\ folder')。但答覆都沒有回答這個問題。例外是「zipfile.BadZipfile:目錄中的文件名」env \ index「和標題」env/index「不同。」 – Cat 2011-05-19 19:46:00
+1支持反對隨機,無法解釋的downvotes。 – jedwards 2011-05-19 19:47:48