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

使用Python zipfile从ZIP中提取包含文件名上特定字符串的文件,python,regex,zipfile,Python,Regex,Zipfile,我有一个ZIP文件,需要提取文件名中包含字符串“test”的所有文件(通常是一个)。它们都是xlsx文件 我正在使用Python zipfile来实现这一点。这是我的代码,不起作用: zip.extract(r'*\test.*\.xlsx$', './') 我得到的错误是: KeyError: "There is no item named '*\\\\test.*\\\\.xlsx$' in the archive" 有什么想法吗?您在这里遇到了多个问题: r简单的意思是将字符串作为原

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

我正在使用Python zipfile来实现这一点。这是我的代码,不起作用:

zip.extract(r'*\test.*\.xlsx$', './')
我得到的错误是:

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

有什么想法吗?

您在这里遇到了多个问题:

  • 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文件球形语法:<代码> fnMatcCase[ff.FiNeNAM','*.Test.*xL')(在后台将它转换成正则表达式,但这会使代码稍微简单)

这里有多个问题:

  • 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文件球形语法:<代码> fnMatcCase[ff.FiNeNAM','*.Test.*xL')(在幕后,它将它转换成正则表达式,但这会使代码稍微简单)