2009-08-13 15 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 os.walk(path)]の中の_、__、ファイルのための( '.asp')))、これは "Python"のやり方だと思います。 。 –

+4

1ライナーは素晴らしいですが、読みやすさの点でPythonicではありません。 – Unknown

+0

これはディレクトリを再帰的に削除しますが、ファイルのパスは保存しません。 – hughdbrown

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

+0

私は2番目の解決策を実行したときに、同じディレクトリを繰り返し検索します。 >>> asps = [] >>> p = r'C:\ temp ' >>> os.walk(p)のルート、ディレクトリ、ファイルの場合: ... asps + = fnmatch.filter([ファイル内のファイルの場合は[os.path.join(root、file)]、 "* .txt") – hughdbrown

+0

うーん、そうではありません。私はルートディレクトリの下の複数のディレクトリに同じファイルを持っています。同じディレクトリが繰り返し検索されているように見えますが、そうではありません。あなたの最初の解決法のように、パスがついた方が良いでしょう。 – hughdbrown