2013-01-05 14 views
16

Pythonでディレクトリにファイル(ディレクトリではない)をリストする方法はありますか?私はos.listdiros.path.isfile()のループを使用することができると知っていますが、もっと簡単なもの(関数os.path.listfilesindirなど)があれば、それはおそらく良いでしょう。ディレクトリ内のファイルのみを一覧表示しますか?

+0

[関連](http://stackoverflow.com/q/6664205) – Tshepang

答えて

29

これはa simple generator expression次のとおりです。

files = (file for file in os.listdir(path) 
     if os.path.isfile(os.path.join(path, file))) 
for file in files: # You could shorten this to one line, but it runs on a bit. 
    ... 

それとも、それはあなたがより適している場合、あなたはジェネレータ関数を作ることができる:

def files(path): 
    for file in os.listdir(path): 
     if os.path.isfile(os.path.join(path, file)): 
      yield file 

そして、単に:

for file in files(path): 
    ... 
+0

なぜ私はこれにdownvoteを取得しましたか? –

+0

dirnameとファイル名の間にjoinを追加するのを忘れた – ayvango

+0

@ayvangoこれはちょうど異なる動作です。質問に完全なパスを指定する必要はなく、これは明確な方法でそのまま動作します。 –

1

あなたがpathlibを試みることができます、他の便利なものもたくさんあります。

Pathlibは、ファイルシステムのパスと対話するためのオブジェクト指向ライブラリです。現在のディレクトリ内のファイルを取得するには、一つは行うことができます。os.pathを使用するよりも

from pathlib import * 
files = (x for x in Path(".") if x.is_file()) 
for file in files: 
    print(str(file), "is a file!") 

これは、私の意見では、よりPython的。

も参照してください。PEP 428。次のようにWindowsでpathlibを使用して

+2

一般的なアドバイスの1つは、そのような種類のインポートを避けることです。つまり、使用するものを単にインポートするだけです。これは、あなたのケースでは 'from pathlib import Path'です。 – Tshepang

+1

'pathlib'は素晴らしいですが、私はそれが手元のスクリプトに依存していると主張しています。もし' pathlib'が過度であるかもしれないので、ファイルを数回しか扱わなければならないでしょう。 –

2

files = (x for x in Path("your_path") if x.is_file())

はエラーを生成します

TypeError: 'WindowsPath' object is not iterable

あなたはむしろpathlib、最短の道トンを使用してPath.iterdir()

filePath = Path("your_path") 
if filePath.is_dir(): 
    files = list(x for x in filePath.iterdir() if x.is_file()) 
2
files = next(os.walk('..'))[2] 
0

を使用する必要がありますoリストのみのファイルは次のとおりです。

[x for x in Path("your_path").iterdir() if x.is_file()] 

(必要な場合)

関連する問題