2009-08-13 50 views

Trả lời

16

Bạn sẽ muốn sử dụng os.walk mà sẽ làm cho tầm thường đó.

import os 

asps = [] 
for root, dirs, files in os.walk(r'C:\web'): 
    for file in files: 
     if file.endswith('.asp'): 
      asps.append(file) 
+1

Hoặc 'rắn hổ = [(tập tin cho tập tin trong file nếu file.endswith ('.asp')) cho _, __, tập tin trong os.walk (path)] ', mà tôi nghĩ rằng sẽ là" Pythonic "cách để làm điều đó (mặc dù nó thực sự chỉ là cú pháp ngắn hơn một chút cho cùng một điều) . –

+4

1 lót là tốt đẹp nhưng không chính xác Pythonic dễ đọc. – Unknown

+0

Thao tác này sẽ đệ quy lại các thư mục nhưng không lưu trữ đường dẫn của các tệp. – hughdbrown

3

đi bộ cây với os.walk và nội dung bộ lọc với glob:

import os 
import glob 

asps = [] 
for root, dirs, files in os.walk('/path/to/dir'): 
    asps += glob.glob(os.path.join(root, '*.asp')) 

hoặc với fnmatch.filter:

import fnmatch 
for root, dirs, files in os.walk('/path/to/dir'): 
    asps += fnmatch.filter(files, '*.asp') 
+0

Giống như os.path.join(). Tôi tưởng tượng OP sẽ tìm thấy anh ta cần đường dẫn đầy đủ đến các tập tin tìm thấy. – hughdbrown

+0

Khi tôi đã làm giải pháp thứ hai của bạn, nó chỉ tìm kiếm cùng một thư mục nhiều lần. Tôi nghĩ rằng nó cần điều này: >>> asps = [] >>> p = r'C: \ temp ' >>> cho thư mục gốc, dirs, tệp trong os.walk (p): ... asps + = fnmatch.filter ([os.path.join (gốc, tệp) cho tệp trong tệp], "* .txt") – hughdbrown

+0

Ummm, không hoàn toàn đúng. Tôi có cùng một tệp trong nhiều thư mục trong thư mục gốc. Có vẻ như cùng một thư mục được tìm kiếm nhiều lần nhưng không phải. nó vẫn sẽ tốt hơn với đường dẫn kèm theo, như trong giải pháp đầu tiên của bạn. – hughdbrown

Các vấn đề liên quan