【问题标题】:Extract file that contains specific string on filename from ZIP using Python zipfile使用 Python zipfile 从 ZIP 中提取包含文件名上特定字符串的文件
【发布时间】:2016-11-09 12:09:32
【问题描述】:

我有一个 ZIP 文件,我需要提取文件名中包含字符串“test”的所有文件(通常是一个)。都是xlsx文件。

我为此使用 Python zipfile。这是我的代码不起作用:

zip.extract(r'*\test.*\.xlsx$', './')

我得到的错误:

KeyError: "There is no item named '*\\\\test.*\\\\.xlsx$' in the archive"

有什么想法吗?

【问题讨论】:

    标签: python regex zipfile


    【解决方案1】:

    这里有多个问题:

    • r 只是意味着将字符串视为原始字符串,看起来您可能认为它创建了一个正则表达式对象; (无论如何,zip.extract() 只接受字符串)
    • 正则表达式开头的 * 量词之前没有要匹配的字符

    您需要手动遍历 zip 文件索引并将文件名与您的正则表达式匹配:

    from zipfile import ZipFile
    import re
    zip = ZipFile('myzipfile.zip')
    for info in zip.infolist():
       if re.match(r'.*test.*\.xlsx$', info.filename):
           print info.filename
           zip.extract(info)
    

    您也可以考虑使用 shell 文件通配语法:fnmatchcase(info.filename, '*.test.*.xls')(在幕后它会将其转换为正则表达式,但它会使您的代码稍微简单一些)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-26
      相关资源
      最近更新 更多