2011-06-28 20 views

cevap

6

bir yolu yapmak olabilir:

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

Ben tam listesini otherways istenen klasör listesini alabilirsiniz o, ama ben 10000 klasörleri çok daha fazla zip var. Ben sadece daha hızlı arama yapmak istiyorum. – Pythonpadavan

+0

@Pythonpadavan: Bir çözüm var ama pythonik bir yol değil. Sadece Linux'ta çalışacak. ”>>> os.system (" unzip -l zip.zip | grep/$ ") 0 2011-06 -28 22:59 zip/bir/ 0 '' filename' ile 'zip.zip' değiştir ' – Kracekumar

+0

Teşekkürler ama operasyon sys verilir ve tahmin edin; Windows. – Pythonpadavan

0

daha

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

Python en zipfile önceki cevapları sanmıyorum

1

sadece klasörleri saklamaz çünkü Bazı platformlarda belirtildiği gibi, pathsep'in / olduğunu varsayarlar. Ayrıca, alt dizinleri de göz ardı ederler (Pythonpadavan için sorun olmayabilir ya da olmayabilir). Ne hakkında:

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

(Tabii ki, son iki adım olabilir: Eğer gerçekten sadece üst düzey dizinleri, sonra son bir adım için agroszer 'ın cevabı ile birleştirmek isterseniz

import os 
import zipfile 

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

kombine :)

0

piton 3'te:

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) 
İlgili konular