从zip存档中提取单个文件,而无需在Python中迭代整个名称列表
我有一个包含文件夹的zip文件,如下所示:从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) 我正在
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我在发布代码之前已经测试过代码-它是有效的。你是对的,我是错的。我有罪。拉链规格是。。问题不清楚,文件夹条目确实存在。