Use*_*ror 0 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()
Run Code Online (Sandbox Code Playgroud)
实际生成的错误信息如下:
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
Run Code Online (Sandbox Code Playgroud)
感谢您的任何建议。弗兰克·奥吉米恩
别叫它zip!你正在屏蔽内置的。
另外,zip.close()真的在你的for循环内吗?不应该的。
您应该使用extractZipFile 对象的方法,这样您就不需要将整个文件读入内存。
代替
file(join("C:\\Incoming\\", name), 'wb').write(zip.read(each))
Run Code Online (Sandbox Code Playgroud)
做
zip.extract(each, "C:\\Incoming\\")
Run Code Online (Sandbox Code Playgroud)
编辑:这是在 2.6 中添加的,就像 extractall您只想将整个内容提取到一个目录一样。
如果无法升级,请参考如何在Python 2.5中模拟ZipFile.open?(在问题中,而不是答案)将让您使用解析 zip 文件并使用 zlib 提取数据,而无需将其读入内存。
| 归档时间: |
|
| 查看次数: |
2025 次 |
| 最近记录: |