2013-08-02 80 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)