2012-02-24 48 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