【问题标题】:Python extract folder from zip file with spaces in namePython从名称中带有空格的zip文件中提取文件夹
【发布时间】:2018-04-18 12:09:57
【问题描述】:

目前我正在编写一个从 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'的项目”

我认为这指的是 bar 的“b”。那么你有什么想法为什么第二次调用不起作用或者我应该如何转义文件夹名称中的空格字符来提取它?

【问题讨论】:

    标签: python zipfile


    【解决方案1】:

    尝试使用 r"string" 而不是单引号来包裹路径。未经测试 - 仅凭记忆..

    currentFile.extractall(r"foo bar/", path)
    

    【讨论】:

      【解决方案2】:

      自己发现了错误。来自documentation

      ZipFile.extractall([path[, members[, pwd]]])

      从存档中提取所有成员到当前工作目录。 path 指定要提取到的不同目录。 members 是可选的,并且必须是 namelist() 返回的列表的子集。 pwd 是用于加密文件的密码。

      列表的子集引用一个列表。所以我尝试了:

      currentFile.extractall(path, ['foo bar/'])
      

      而且效果很好。希望它会帮助某人。另请注意,与 extract 方法相比,路径和成员是相反的!

      【讨论】:

        【解决方案3】:

        你必须在数组中传递路径:

        currentFile.extractall(path, ['foo bar/'])
        

        【讨论】:

        • 感谢您的帮助。但是现在我有一个新问题:namelist() 方法没有列出我的目录。有什么想法吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-27
        • 2018-10-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多