目前我正在编写一个从zip文件中提取文件的python脚本。为此,我使用ZipFile模块。一切都适用于文件,但我的文件夹中有一个问题,其名称中包含空格。
我的zip文件具有以下结构:
Test.zip
- foo/test.txt
- foo bar/test.txt
我提取文件的代码如下所示:
currentFile = ZipFile(zipFilePath, 'r')
currentFile.extractall(path, 'foo/')
currentFile.extractall(path, 'foo bar/')
但第二次调用会产生以下错误:
KeyError:“档案中没有名为'b'的项目”
我认为这指的是酒吧的'b'。那么你有什么想法为什么第二个调用不起作用或我应该如何转义文件夹名称中的空格字符来提取它?
答案 0 :(得分:1)
自己发现错误。来自documentation:
ZipFile.extractall([path [,members [,pwd]]])
将存档中的所有成员解压缩到当前工作目录。 path指定要提取的其他目录。成员是可选的,必须是namelist()返回的列表的子集。 pwd是用于加密文件的密码。
列表的子集引用回列表。所以我试过了:
currentFile.extractall(path, ['foo bar/'])
并且效果很好。希望它会帮助某人。另请注意,与extract
方法相比,路径和成员相反!
答案 1 :(得分:0)
尝试使用r" string"包装路径而不是单引号。未经测试 - 只是从记忆中走出来..
currentFile.extractall(r"foo bar/", path)
答案 2 :(得分:0)
您必须在数组中传递路径:
currentFile.extractall(path, ['foo bar/'])