2009-08-13 65 views

回答

16

你會想使用os.walk這將使這個微不足道的。

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

或'平均價格= [(如果在文件的文件的文件file.endswith ('.asp'))for _,__,os.walk(path)]中的文件],我認爲這將是「Pythonic」的做法(儘管對於完全相同的東西它實際上只是略短一些的語法) 。 – 2009-08-13 21:01:03

+4

1襯裏很不錯,但在可讀性方面並不完全是Pythonic。 – Unknown 2009-08-13 21:02:38

+0

這會遞減目錄但不存儲文件的路徑。 – hughdbrown 2009-08-13 22:12:41

3

走在樹os.walk和內容過濾與glob

import os 
import glob 

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

fnmatch.filter

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

像os.path.join()。我想象OP會發現他需要完整的路徑來找到找到的文件。 – hughdbrown 2009-08-13 22:01:42

+0

當我做了第二個解決方案時,它只是反覆搜索同一個目錄。我認爲它需要這個: >>> asps = [] >>> p = r'C:\ temp' >>> for root,dirs,os.walk中的文件(p): ... asps + = fnmatch.filter([os.path.join(root,file)for file in files],「* .txt」) – hughdbrown 2009-08-13 22:09:26

+0

嗯,不太對。我在根目錄下的多個目錄中具有相同的文件。它看起來像重複搜索相同的目錄,但不是。如果您的第一個解決方案與附加的路徑一樣,它仍然會更好。 – hughdbrown 2009-08-13 22:35:57

相關問題