2011-06-28 133 views

回答

6

一種方式是做:

>>> [x for x in file.namelist() if x.endswith('/')] 
<<< ['folder/', 'folder2/'] 
+0

我可以得到完整的列表otherways到所需的文件夾列表o,但我有更多的GB與許多10000個文件夾zip.I只需要更快的搜索。 – Pythonpadavan

+0

@Pythonpadavan:有一個解決方案,但它不是pythonic的做法,它只會在Linux中工作。'>>> os.system(「unzip -l zip.zip | grep/$」) 0 2011-06 -28 22:59 zip/one/ 0'用你的'filename'替換'zip.zip' – Kracekumar

+0

謝謝但是操作系統給出了,猜猜看是什麼;是Windows。 – Pythonpadavan

0
沿線

set([os.path.split(x)[0] for x in zf.namelist() if '/' in x]) 

因爲Python的zip文件並不存儲只是

1

我不認爲以前的答案的文件夾是跨平臺兼容的,因爲他們假設pathsep爲/,如某些評論中所述。他們也忽略子目錄(這可能會或可能不會影響Pythonpadavan ...不完全清楚的問題)。怎麼樣:

import os 
import zipfile 

z = zipfile.Zipfile('some.zip', 'r') 
dirs = list(set([os.path.dirname(x) for x in z.namelist()])) 

如果你真的只是想頂級目錄,然後用agroszer的回答結合本作最後一步:

topdirs = [os.path.split(x)[0] for x in dirs] 

(當然,最後兩個步驟可能是合併:)

0

在Python 3:

from zipfile import ZipFile 

# All directories: 
for f in zip_ref.namelist(): 
    zinfo = zip_ref.getinfo(f) 
    if(zinfo.is_dir()): 
     print(f) 

# Only root directories: 
root_dirs = [] 
zip_ref = ZipFile("ZipFile.zip") 
for f in zip_ref.namelist(): 
    zinfo = zip_ref.getinfo(f) 
    if zinfo.is_dir(): 
     # This is will work in any OS because the zip format 
     # specifies a forward slash. 
     r_dir = f.split('/') 
     r_dir = r_dir[0] 
     if r_dir not in root_dirs: 
      root_dirs.append(r_dir) 
for d in root_dirs: 
    print(d) 
相關問題