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

胡金庫 2023年1月30日
  1. os.listdir
  2. os.walk
  3. glob.glob
Python でディレクトリのすべてのファイルを取得する方法

特定のフォルダ内のすべてのファイルを一覧表示します。には、少なくとも 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.rst のように、一致したファイルの完全なパスを返します。

警告

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

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

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

著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - Python File

関連記事 - Python Dictionary