2013-08-02 35 views
4

遍历整个名单我已经在一个文件夹,这样的zip文件:提取从ZIP档案的单个文件,而不在Python

some.zip/ 
    some_folder/ 
     some.xml 
     ... 

我使用的是zipfile库。 我想要的只是打开some.xml文件,但我现在不用some_folder这个名字。 我的解决办法是这样的:

def get_xml(zip_file): 
     for filename in zip_file.namelist(): 
      if filename.endswith('some.xml'): 
       return zip_file.open(filename) 

我想知道是否有比扫描整个列表其他更好的解决方案。

+0

我想使用ZipFile.namelist(),但我不想遍历整个列表。 –

+0

你必须;只有列出所有文件名才能检测出使用的文件夹名称。 –

回答

9

此打印test.zip文件中的目录列表:

from zipfile import ZipFile 


with ZipFile('test.zip', 'r') as f: 
    directories = [item for item in f.namelist() if item.endswith('/')] 
    print directories 

如果你知道里面有只有一个目录,只取第一项:directories[0]

希望有所帮助。

+0

没有以斜杠结尾的条目。永远。因为没有目录条目。 –

+0

@MartijnPieters这是不正确的。 'ZipFile'也公开目录条目。对于包含文件'x/y'和'x/z/w'的ZIP,表达式'[i.filename for i in z.infolist()]'评估为'['x /','x/y' ,'x/z /','x/z/w']'。 – user4815162342

+0

@MartijnPieters我在发布之前测试了代码 - 它的工作原理。 – alecxe

2

你想获取包含some.xml的目录吗?

import os 
import zipfile 

with zipfile.ZipFile('a.zip', 'r') as zf: 
    for name in zf.namelist(): 
     if os.path.basename(name) == 'some.xml': 
      print os.path.dirname(name)