我有一个ZIP文件,我需要提取包含字符串" test"的所有文件(通常是一个)。在文件名中。它们都是xlsx文件。
我正在使用Python zipfile。这是我的代码不起作用:
zip.extract(r'*\test.*\.xlsx$', './')
我得到的错误:
KeyError: "There is no item named '*\\\\test.*\\\\.xlsx$' in the archive"
有什么想法吗?
答案 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')
(在幕后它将它转换为正则表达式,但它使你的代码稍微简单)