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

Jinku Hu 2023年1月3日 2019年12月24日 Python Python File Python Dictionary
  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 関数で検証する必要があります。

Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

関連記事 - Python File

  • Python でファイルにテキストを追加する方法
  • Python にファイルが存在するかどうかを確認する方法
  • 特定の拡張子を持つファイルを Python でのみ見つける方法
  • Python でファイルから特定の行を読み取る方法
  • テキストファイルを読み、その内容を Python で印刷する
  • 関連記事 - Python Dictionary

  • Python の辞書にキーが存在するかどうかを確認する方法
  • Python で辞書をリストに変換する
  • Python 辞書で最大値を求める
  • Python 辞書を値でソートする方法
  • Python 2 および 3 で 2つの辞書をマージする方法