2010-11-07 23 views
18

Ben os.listdir() çalışır gibi bir özyinesiz os.walk() yürüyüş yapmak için bir yol arıyorum. Ama aynı şekilde os.walk() geri dönmesi gerekiyor. Herhangi bir fikir?Non-özyinelemeli os.walk()

Önceden teşekkür ederiz.

cevap

24
next(os.walk(...)) 
+0

Düşünebildiğimden daha basit ... Teşekkürler! –

4

Benim biraz daha parametreleştirilen çözüm bu olacaktır:

for root, dirs, files in os.walk(path): 
    if not recursive: 
     while len(dirs) > 0: 
      dirs.pop() 

    //some fency code here using generated list 

Düzenleme: düzeltmeleri, eğer/sorun ise. Teşekkürler, @Dirk van Oosterbosch:

for root, dirs, filenames in os.walk(workdir): 
    for fileName in filenames: 
     print (fileName) 
    break #prevent decending into subfolders 

Bunun nedeni (varsayılan olarak) çalışır:

for str_dirname, lst_subdirs, lst_files in os.walk(str_path): 
    if not bol_recursive: 
      while len(lst_subdirs) > 0: 
       lst_subdirs.pop() 
+4

Bu yalnızca ** bir ** alt dizini varsa çalışır. Birden çok alt dizin için '' yerine 'yerine len (dirs)> 0 'kullanılır. –

+0

@DirkvanOosterbosch: ya da daha da basit: sadece "eğer özyinelemeyen: break" ilgisiz: "dirs: dirs.pop()' yerine "del dirs [:]' yi kullanabilirsiniz. – jfs

+0

Use 'dirs.clear()' daha idiomatiktir. – ideasman42

0

Eh buna paralel olarak daha oldu os.walk öncelikle dosyaları istenen klasörde listeler ve sonra alt klasörlere gider.

4

döngü dosya adları sonra break ekleyin:} Kamiccolo demek istediğini

İlgili konular