2012-02-24 50 views
0

我正在使用http://docs.python.org/library/zipfile.html將文件壓縮爲zip。它工作的很好,但是通過我的ubuntu(不是在python中,只需右鍵單擊文件,然後點擊'Extract here')解壓縮文件就會被截斷。我的原始文件有〜167kb,通過ubuntu〜164kb提取(這是csv文件,所以我錯過了文件末尾的幾行)。Zipfile庫提取問題

有什麼建議嗎?

編輯:

我的代碼如下:

try: 
    fp2 = zipfile.ZipFile(el.replace('.csv', '.zip'), 'w', 
      zipfile.ZIP_DEFLATED) 
    fp2.testzip() 
    fp2.write(el) 
finally: 
    fp2.close() 

其中EL是一些csv文件。

編輯2: 看來,寫入zip文件時,某些數據會丟失。

+0

你確定關閉了文件? (如果你不打電話關閉文件警告一些重要記錄可以省略) – 2012-02-24 20:07:39

+0

也許嘗試'wb'而不是'w'模式? – 2012-02-24 20:16:00

+0

我是linux用戶。所以當我把'wb'代替'w'時,我收到RuntimeError。 – Drachenfels 2012-02-24 20:33:28

回答

0

幾點建議:

(1)你叫testzip但忽略返回值。如果歸檔文件是空的,它可能會搞砸(就像在這種情況下)。取消對testzip的呼叫。

(2)通過另一種方式測試創建的文件的完整性,例如, (a)linux_zipfile_executable -t your_created_archive.zip(b)使用testzip的短Python腳本。嘗試一些其他提取手段。

(3)忽略mode='wb'推動器;這僅與使用內置的open打開的文件相關。正如zipfile文檔所述,唯一允許的模式是r,wa。其他:RuntimeError: ZipFile() requires mode "r", "w", or "a"。當使用內置的open打開存檔文件時,zipfile代碼實際上使用b標誌。

(4)仔細檢查,在試圖找到你的問題,你實際上是比較正確的一對CSV文件的混亂。

(5)在web上發佈3個文件(輸入,輸出和.zip)。

+0

事實是,它不是zipfile的問題,這是一個與csv和它的作家問題。我正在對新生成的csv文件進行一些操作,而不關閉傳遞給csv.writer的文件指針。在進行實際壓縮之前關閉它解決了我的問題。 – Drachenfels 2012-02-28 15:10:13