Python でディレクトリのすべてのファイルを取得する方法
特定のフォルダ内のすべてのファイルを一覧表示します。には、少なくとも 3つのメソッドがあり、使用される関数は os.listdir
、os.walk
、glob.glob
です。
以下に、このチュートリアルコードのプリセット条件の一部を示します。
- Python バージョン-Python 3
- ディレクトリ名は
dirPath
です。システム内に存在するため、ディレクトリの存在を確認する必要はありません。
os.listdir
os.listdir
はディレクトリ内のすべてのファイルとフォルダを一覧表示します。ため、結果からファイルをフィルタリングするには追加のコードが必要です。
import os
dirPath = r"C:\git\DelftStack\content"
result = [f for f in os.listdir(dirPath) if os.path.isfile(os.path.join(dirPath, f))]
print(result)
os.listdir
は相対的に所与のフォルダ dirPath
の相対パスだけを返しますが、関数 os.path.isfile
は完全なフォルダパスが必要です。入力がファイルであるかどうかを確認するために、関数 os.path.join
で dirPath
と os.listdir
の結果を組み合わせてファイルまたはフォルダの完全なパスを構成する必要があります。
os.walk
os.walk
は、フォルダー全体を深さ優先でトラバースでき、新しい(サブ)フォルダーにトラバースすると、3 要素のタプル - (dirpath
、dirname
、filenames
)、指定されたフォルダ自体の最高レベルも含まれます。
指定されたフォルダー内のすべてのファイルは、os.walk
ジェネレーターの最初のトラバーサルで生成されるため、すべてのファイルを取得する最も Pythonic 的な方法は、
import os
dirPath = r"C:\git\DelftStack\content"
result = next(os.walk(dirPath))[2]
print(result)
dirpath
と結合して完全な情報を構成する必要があります。glob.glob
glob
モジュールは、Unix シェルで使用される規則に従って、所与の特定のパターンにマッチするすべてのパス名を見つけます。glob.glob
は指定されたパス名パターンに一致するパス名のリストを返します。ファイルパスのパターンは *.*
で、これが入力引数として glob.glob
に渡されます。
import glob
dirPathPattern = r"C:\git\DelftStack\content\*.*"
result = glog.glob(dirPathPattern)
print(result)
glob.glob
は C:\git\DelftStack\content\about.rst
のように、一致したファイルの完全なパスを返します。
上記の例の glob.glob
メソッドは、リストされたすべての結果がファイルであることを保証できません。パス名の文字が特定のパターンに一致しないことをチェックするだけで、フォルダーかフォルダーかをチェックしないためです。
たとえば、ディレクトリに test.test
のような名前パターンがある場合、このディレクトリも結果に含まれます。
出力にファイルのみが含まれていることを確認する必要がある場合は、os.path.isfile
関数で検証する必要があります。
関連記事 - Python File
- Python でファイルにテキストを追加する方法
- Python にファイルが存在するかどうかを確認する方法
- 特定の拡張子を持つファイルを Python でのみ見つける方法
- Python でファイルから特定の行を読み取る方法
- Python で gzip ファイルを読み取る