2011-06-28 5 views

答えて

6

一つの方法は何をするかもしれません:

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

私はに完全なリストotherwaysから目的のフォルダのリストを取得することができますo、しかし、私は10000フォルダの多くを持つジッパーのGBを持っています。私はちょうどより速い検索をしたい。 – Pythonpadavan

+0

@Pythonpadavan:解決策はありますが、pythonicのやり方ではありません。Linuxでのみ動作します。>>> os.system( "unzip -l zip.zip | grep/$") 0 2011-06 -28 22:59 zip/one/ 0 '' zip.zip'をあなたの 'filename'で置き換えてください。 – Kracekumar

+0

ありがとうございますが、操作sysが与えられています。 Windowsです。 – Pythonpadavan

0

より

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

Pythonのzipファイルには、私は、以前の答えを考えていない

1

フォルダだけを格納していないため、いくつかのコメントに記載されているように、pathsepが/であると仮定しているため、クロスプラットフォーム対応です。また、サブディレクトリは無視されます(Pythonpadavanに問題がないかもしれません...質問から完全にはっきりしませんでした)。何について:

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

(もちろん、最後の2つの手順は次のようになります。あなたは本当にただのトップレベルのディレクトリは、その後、最後のステップのためにagroszerの答えと組み合わせる場合

import os 
import zipfile 

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

組み合わせ:)

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) 
関連する問題