邮政编码无效 - 内存错误
有人能帮我看看我的代码有没有错误吗?我想把代码写得尽量简单,但它出现了内存错误。有些压缩文件解压时没问题,不过有些却不行...
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 提取数据,而不需要把它读入内存。