邮政编码无效 - 内存错误

0 投票
1 回答
2026 浏览
提问于 2025-04-16 22:23

有人能帮我看看我的代码有没有错误吗?我想把代码写得尽量简单,但它出现了内存错误。有些压缩文件解压时没问题,不过有些却不行...

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 个回答

5

别叫它 zip!这样会遮盖掉内置的功能。

还有,zip.close() 真的在你的 for 循环里面吗?这可不应该。

你应该使用 ZipFile 对象的 extract 方法,这样就不需要把整个文件都读到内存里。

而不是

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

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

补充:这个功能是在 2.6 版本中加入的,extractall 也是,如果你只是想把整个文件提取到一个目录里。

如果你不能升级,可以参考这个链接中的代码:如何在 Python 2.5 中模拟 ZipFile.open?(在问题部分,不是答案),它可以让你解析 zip 文件并使用 zlib 提取数据,而不需要把它读入内存。

撰写回答