Python のディレクトリとサブディレクトリにあるすべてのファイルを一覧表示する

Fariba Laiq 2023年1月30日
  1. os.walk() を使用して、Python のディレクトリとサブディレクトリ内のすべてのファイルを一覧表示する
  2. listdir() を使用して、Python のディレクトリとサブディレクトリ内のすべてのファイルを一覧表示する
  3. glob を使用して、Python のディレクトリとサブディレクトリ内のすべてのファイルを一覧表示する
Python のディレクトリとサブディレクトリにあるすべてのファイルを一覧表示する

Python には、ディレクトリおよびサブディレクトリ内のファイルのリストにアクセスするための多くの方法が用意されています。このガイドでは、os.walk()listdir()、および glob について説明します。

os.walk() を使用して、Python のディレクトリとサブディレクトリ内のすべてのファイルを一覧表示する

Python の os モジュールは、オペレーティングシステムと対話する手段を提供します。ファイルシステムを処理する多くの組み込み関数があります。

このモジュールを使用して、ディレクトリをフェッチ、作成、削除、および変更できます。walk() は、トップダウンまたはボトムアップのいずれかの方法でディレクトリツリーにファイル名を生成する再帰メソッドです。

次のコードでは、MyFolder のディレクトリとサブディレクトリにあるファイルを表示しています。この場合、このフォルダーは Python の環境のホームディレクトリにあります。

サンプルコード:

import os

root = "MyFolder"
for path, subdirs, files in os.walk(root):
    for name in files:
        print(os.path.join(path, name))

出力:

MyFolder\text_file1.txt
MyFolder\text_file2.txt
MyFolder\SubFolder1\text_file3.txt
MyFolder\SubFolder1\text_file4.txt

listdir() を使用して、Python のディレクトリとサブディレクトリ内のすべてのファイルを一覧表示する

次のコードでは、walk メソッドを使用せずに、ディレクトリツリーをトラバースし、そのファイルとサブファイルにアクセスします。開始点としてルートフォルダ MyFolder を指定しました。

次に、listdir() を使用してそのフォルダのディレクトリとサブディレクトリにアクセスし、それらをアイテムに保存しました。アイテム名を前のパスと連結し、isdir() メソッドを使用してそれがディレクトリであるかどうかを確認しました。

その場合は、そのディレクトリをさらに検索して、同じ手順を適用します。以前のパスがファイル名の場合はファイル名を追加して表示しました。

サンプルコード:

import os

root = "MyFolder"
files = []
walk = [root]
while walk:
    folder = walk.pop(0) + "/"
    items = os.listdir(folder)  # items = folders + files
    for i in items:
        i = folder + i
        (walk if os.path.isdir(i) else files).append(i)
print(files)

出力:

['MyFolder/text_file1.txt', 'MyFolder/text_file2.txt', 'MyFolder/SubFolder1/text_file3.txt', 'MyFolder/SubFolder1/text_file4.txt']

glob を使用して、Python のディレクトリとサブディレクトリ内のすべてのファイルを一覧表示する

glob は、global を表す Python の組み込みモジュールです。このモジュールは、名前と拡張子が特定のパターンに一致するすべてのファイルパスを返します。

ここでは、*.*を使用しました。これは、拡張子が付いたファイル名を示します。glob.glob() を使用して、ディレクトリまたはサブディレクトリ内のファイルを再帰的に検索します。

再帰が True に設定されている場合、パターン**はすべてのファイルと 0 個以上のフォルダおよびサブディレクトリに一致します。

サンプルコード:

import glob

path = "MyFolder\**\*.*"
for file in glob.glob(path, recursive=True):
    print(file)

出力:

MyFolder\text_file1.txt
MyFolder\text_file2.txt
MyFolder\SubFolder1\text_file3.txt
MyFolder\SubFolder1\text_file4.txt
著者: Fariba Laiq
Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn

関連記事 - Python Directory