从zip存档中提取单个文件,而无需在Python中迭代整个名称列表

从zip存档中提取单个文件,而无需在Python中迭代整个名称列表,python,zip,zipfile,Python,Zip,Zipfile,我有一个包含文件夹的zip文件,如下所示: some.zip/ some_folder/ some.xml ... def get_xml(zip_file): for filename in zip_file.namelist(): if filename.endswith('some.xml'): return zip_file.open(filename) 我正在

我有一个包含文件夹的zip文件,如下所示:

some.zip/
    some_folder/
         some.xml
         ...
    def get_xml(zip_file):
        for filename in zip_file.namelist():
            if filename.endswith('some.xml'):
                return zip_file.open(filename)
我正在使用图书馆。 我只想打开some.xml文件,但我现在不想打开some\u文件夹的名称。 我的解决方案如下所示:

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

我想知道除了扫描整个列表之外,是否还有更好的解决方案。

这将打印
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
如果您知道其中只有一个目录,只需使用第一项:
目录[0]


希望对您有所帮助。

您想获取包含
一些.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)

我正在考虑使用ZipFile.namelist(),但我不想遍历整个列表;只有列出所有文件名,才能检测到使用的文件夹名。没有以斜杠结尾的条目。曾经因为没有目录项。@MartijnPieters这不是真的
ZipFile
还公开目录项。对于包含文件
x/y
x/z/w
的ZIP,表达式
[i.filename For i in z.infolist()]
的计算结果为
['x/','x/y','x/z/','x/z/w']
@MartijnPieters我在发布代码之前已经测试过代码-它是有效的。你是对的,我是错的。我有罪。拉链规格是。。问题不清楚,文件夹条目确实存在。