2011-04-22 94 views
1

我在想如何告訴Python只使用通配符從zip文件夾中提取「.txt」文件。此代碼工作正常,我:Python Zip文件,通配符

extractor.extract("\websitefiles\test.hmtl")" 

我如何使用相同的代碼以解當前目錄中的所有.txt文件?我在想這樣的事情:

extractor.extract(".*.txt") 

但它失敗了..任何想法?

回答

3

我只需要python來提取當前目錄下的.txt文件,這些文件不大於3兆字節。

#!/usr/bin/env python 
import zipfile 
from contextlib import closing 

MiB = 2**20 # mebibyte 

with closing(zipfile.ZipFile("example.zip")) as zfile: 
    for info in zfile.infolist(): 
     if info.filename.endswith('.txt') and 0 < info.file_size <= 3*MiB: 
      zfile.extract(info) 
2

您需要獲取ZIP中所有文件的列表,然後請求每個文件一次一個。 Zipfile有namelist()方法給你這個列表。

+0

哦,我會怎麼做,如果我只是想提取.txt文件不超過3兆的? – user715578 2011-04-22 12:34:43

+0

@ user715578:在由'ZipFile.getinfo(name)'返回的對象上使用'file_size'成員。 – Skurmedel 2011-04-22 12:40:29

+0

呃,我超級迷路了。任何人都可以給我一個示例代碼?我只需要python來提取當前目錄下的.txt文件,這些文件不大於3兆字節。 – user715578 2011-04-22 12:59:36

4

首先,您需要文件名列表,使用namelist()。 然後,您可以過濾的「* .txt」文件與txtfiles = fnmatch.filter(fn_list,"*.txt") 現在,你可以通過一個解壓縮文件之一:

extracts = [ extractor.extract(txt) for txt in txtfiles ] 
+0

它無法識別fn_list是什麼.. – user715578 2011-04-22 13:06:16

+1

@ user715578:'fn_list == filename_list'它是通過'namelist()'獲得的列表 – joaquin 2011-04-22 15:12:42

1

使用功能namelist()來獲取文件的名稱。然後從列表中選擇txt文件並逐個提取它們。