使用Python zip文件从ZIP压缩包含特定字符串的文件
问题描述:
我有一个ZIP文件,我需要提取包含字符串“test”在文件名中的所有文件(通常是一个)。他们都是xlsx文件。使用Python zip文件从ZIP压缩包含特定字符串的文件
我正在使用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文件通配语法:fnmatchcase(info.filename, '*.test.*.xls')
(幕后它把它转换成一个正则表达式,但它使你的代码稍微简单一些)