2016-11-09 161 views
-2

我有一個ZIP文件,我需要提取包含字符串「test」在文件名中的所有文件(通常是一個)。他們都是xlsx文件。使用Python zip文件從ZIP壓縮包含特定字符串的文件

我正在使用Python zipfile。這是我的代碼不能正常工作:

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

的錯誤,我得到:

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

任何想法?

回答

2

您在這裏有許多問題:

  • 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')(幕後它把它轉換成一個正則表達式,但它使你的代碼稍微簡單一些)