2012-09-14 17 views
5

pythonでフォルダ内のファイルの完全な再帰的リストを取得する最も簡単な方法は何ですか?私はos.walk()について知っていますが、すべてのファイルのフィルタリングされていないリストを取得するだけでは不幸です。それは本当に唯一の選択肢ですか?"find"と同等のものを得る最も簡単な方法。 Pythonで?

答えて

11

独自の関数を作成してからあなたを防ぐことは何もありません:

import os 

def listfiles(folder): 
    for root, folders, files in os.walk(folder): 
     for filename in folders + files: 
      yield os.path.join(root, filename) 

あなたはそうのようにそれを使用することができます:

for filename in listfiles('/etc/'): 
    print filename 
+0

ありがとう!この関数が標準ライブラリの一部ではないことを確認したかっただけです。 –

+1

私は1つ存在することを望みます。あなたはいつでも 'os.py'を編集できます;) – Blender

+0

素敵な解決策!しかし、「find。」にはディレクトリもリストされています。しかし、修正は非常に簡単です。 :) –

1

こと、または手動でisdir()/isfile()listdir()で再帰たり、subprocess.check_output()を使用してfind .を呼び出すことができます。 Bascially os.walk()は最高レベル、若干低いレベルはlistdir()に基づく半マニュアルソリューションであり、同じ出力をしたい場合はfind .は何らかの理由であなたに与えます。subprocessでシステムコールを行うことができます。

+0

1を使用してのPythonからfindプログラム自体を使用することができます。 – Blender

0
import os 
path = "path/to/your/dir" 
for (path, dirs, files) in os.walk(path): 
    print files 

はこのやり過ぎです、または私は何かが足りないのですか?

+0

あなたは絶対に正しいです。それは実際よりも難しく見えます。 –

4

os.walk()はどのような意味でも過度のものではありません。これは、ちょっとの間でファイルやディレクトリのリストを生成できます。

files = [os.path.join(dirpath, filename) 
    for (dirpath, dirs, files) in os.walk('.') 
    for filename in (dirs + files)] 

あなたは、プロセスを一度にパスし、メモリ上の安全なだけに、発電機にこれを変えることができます。

+0

+1の最もpythonicソリューション:) – kgr

1

はまた `)(` os.walkためsh

import sh 
text_files = sh.find(".", "-iname", "*.txt") 
関連する問題