51

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

4

8 に答える 8

62

これは単純なジェネレータ式です:

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):
    ...
于 2013-01-05T20:38:16.640 に答える
7

次のように Windows で pathlib を使用します。

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

エラーを生成します:

TypeError: 'WindowsPath' オブジェクトは反復可能ではありません

むしろPath.iterdir()を使用する必要があります

filePath = Path("your_path")
if filePath.is_dir():
    files = list(x for x in filePath.iterdir() if x.is_file())
于 2016-01-25T11:36:50.887 に答える
3

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

Pathlib は、ファイルシステム パスを操作するためのオブジェクト指向ライブラリです。現在のディレクトリにあるファイルを取得するには、次のようにします。

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

私の意見では、これは を使用するよりも Pythonic ですos.path

参照: PEP 428 .

于 2013-01-05T20:39:46.290 に答える
2

を使用してpathlib、ファイルのみを一覧表示する最短の方法は次のとおりです。

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

必要に応じて深度サポート付き。

于 2017-11-17T16:20:17.197 に答える