邮政编码无效 - 内存错误

时间:2011-07-27 18:27:45

标签: python debugging unzip

有人可以指出我的代码中可能包含的任何错误。我想保持代码尽可能简单,但它失败了,因为内存错误。一些压缩文件虽然提取得很好......

import zipfile
import from os.path isdir, join, normpath, split
print "Unzipping data"
z = zipfile.ZipFile("C:\\Incoming\\MyZipFile.zip", 'r')
print z.namelist()
for each in z.namelist():
   if not each.endswith('/'):
      root, name = split(each)
      print name
      file(join("C:\\Incoming\\", name), 'wb').write(z.read(each))
z.close()

生成的实际错误消息如下:

Traceback (most recent call last):
File "C:\\Scripts\\Zip_import_test.py", line 30, in <module>
   file(join("C:\\Incoming\\", name), 'wb').write(zip.read(each))
File "C:\\Python25\lib\zipfile.py, line 501, in read
   bytes = dc.decompress(bytes)
Memory Error

感谢您的任何建议。 Frank Ogiamien

1 个答案:

答案 0 :(得分:4)

不要叫它zip!你正在掩盖内置的。

另外,zip.close()循环中是否for真的存在?它不应该是。

您应该使用ZipFile对象的extract方法,因此您无需将整个文件读入内存。

而不是

file(join("C:\\Incoming\\", name), 'wb').write(zip.read(each))

zip.extract(each, "C:\\Incoming\\")

编辑:这是在2.6中添加的,如果您只想将整个内容提取到目录中那么extractall

如果你无法升级,How to simulate ZipFile.open in Python 2.5?中的代码(在问题中,而不是答案)将允许你使用解析zip文件并使用zlib提取数据而不将其读入内存。