有人可以指出我的代码中可能包含的任何错误。我想保持代码尽可能简单,但它失败了,因为内存错误。一些压缩文件虽然提取得很好......
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
答案 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提取数据而不将其读入内存。