2011-04-22 115 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文件并逐个提取它们。