2010-11-07 43 views
18

Tôi đang tìm cách để thực hiện một chuyến đi không đệ quy os.walk(), giống như os.listdir() hoạt động. Nhưng tôi cần phải quay trở lại giống như cách trả về os.walk(). Bất kỳ ý tưởng?Không đệ quy os.walk()

Cảm ơn bạn trước.

Trả lời

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

Đơn giản hơn tôi có thể nghĩ ... Cảm ơn bạn! –

4

My giải pháp parametrised hơn một chút sẽ là:

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

    //some fency code here using generated list 

Edit: sửa lỗi, nếu/khi vấn đề. Cảm ơn, @Dirk van Oosterbosch:}

+4

Điều này chỉ hoạt động nếu có ** một ** thư mục phụ. Đối với nhiều thư mục con sử dụng 'while len (dirs)> 0' thay vì' if'. –

+0

@DirkvanOosterbosch: hoặc thậm chí đơn giản hơn: chỉ cần 'nếu không đệ quy: break' Không liên quan: bạn có thể sử dụng' del dirs [:] 'thay vì' trong khi dirs: dirs.pop() '. – jfs

+0

Sử dụng 'dirs.clear()' là thành ngữ hơn. – ideasman42

0

Vâng những gì Kamiccolo nghĩa là phù hợp hơn với điều này:

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

Thêm một break sau tên tập tin cho vòng lặp:

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

này hoạt động vì (theo mặc định) os.walk đầu tiên liệt kê các tệp trong thư mục được yêu cầu và sau đó đi vào các thư mục con.