Python でディレクトリのすべてのファイルを取得する方法

  1. os.listdir
  2. os.walk
  3. glob.glob

特定のフォルダ内のすべてのファイルを一覧表示するには、少なくとも 3つのメソッドがあり、使用される関数は os.listdiros.walkglob.glob です。

以下に、このチュートリアルコードのプリセット条件の一部を示します。

  1. Python バージョン-Python 3
  2. ディレクトリ名は 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.joindirPathos.listdir の結果を組み合わせてファイルまたはフォルダの完全なパスを構成する必要があります。

os.walk

os.walk は、フォルダー全体を深さ優先でトラバースでき、新しい(サブ)フォルダーにトラバースすると、3 要素のタプル - (dirpathdirnamefilenames)、指定されたフォルダ自体の最高レベルも含まれます。

指定されたフォルダー内のすべてのファイルは、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.globC:\git\DelftStack\content\about.md のように、一致したファイルの完全なパスを返します。

警告

上記の例の glob.glob メソッドは、リストされたすべての結果がファイルであることを保証できません。パス名の文字が特定のパターンに一致しないことをチェックするだけで、フォルダーかフォルダーかをチェックしないためです。

たとえば、ディレクトリに test.test のような名前パターンがある場合、このディレクトリも結果に含まれます。

出力にファイルのみが含まれていることを確認する必要がある場合は、os.path.isfile 関数で検証する必要があります。

関連記事 - Python file-path

  • Python でファイルとディレクトリを削除する方法
  • Python にファイルが存在するかどうかを確認する方法
  • 特定の拡張子を持つファイルを Python でのみ見つける方法
  • comments powered by Disqus