使用Python zipfile从ZIP中提取包含文件名特定字符串的文件

时间:2016-11-09 12:09:32

标签: python regex zipfile

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

我正在使用Python zipfile。这是我的代码不起作用:

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

我得到的错误:

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

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

这里有多个问题:

  • 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')(在幕后它将它转换为正则表达式,但它使你的代码稍微简单)