testa\
testa\testb\
testa\testb\test.log
> test.zip
>>> from zipfile import ZipFile
>>> zipTest = ZipFile("C:\\...\\test.zip")
>>> zipTest.extractall("C:\\...\\")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "...\zipfile.py", line 940, in extractall
File "...\zipfile.py", line 928, in extract
File "...\zipfile.py", line 965, in _extract_member
IOError: [Errno 2] No such file or directory: 'C:\\...\\testa\\testb\\test.log'
如果我做一个printdir(),我得到这个(第一列):
>>> zipTest.printdir()
File Name
testa/testb/
testa/testb/test.log
如果您使用的是Python2.6,那么extract和extractall方法非常好。我现在必须使用Python2.5,所以如果目录不存在,我只需要创建它们。您可以使用
namelist()
方法获得目录列表。目录总是以正斜杠结尾(即使在Windows上),例如您可能不想这样做完全(也就是说,您可能希望在遍历名称列表时提取zip文件的内容),但是您得到了这个想法。
我试过了,可以复制。正如其他答案所建议的,extractall方法不能解决问题。对我来说,这似乎是zipfile模块中的一个bug(也许仅限Windows?),除非我误解了zipfiles的结构。
如果我做一个
printdir()
,我得到这个(第一列):如果我只提取第一个条目,如下所示:
在磁盘上,这会创建一个文件夹
testa
,其中包含一个文件testb
。这显然是随后提取test.log
失败的原因;testa\testb
是一个文件,而不是文件夹。编辑1:如果只提取文件,则它可以工作:
编辑2:Jeff的代码就是这样;遍历
namelist
;如果是目录,则创建目录。否则,提取文件。相关问题 更多 >
编程相关推荐