コンテンツにスキップ

ディレクトリ内のファイルを一覧表示する方法

[

Pythonでディレクトリ内のファイルをリスト化する方法

多くのファイル関連の操作では、Pythonで特定のディレクトリのすべてのファイルとフォルダのリストを取得することが必要な最初のステップとなります。これについて調べると、さまざまな方法があることに驚くかもしれません。

同じことをする方法が多数存在する場合は、一つの汎用的な解決策があるわけではない可能性があります。おそらく、それぞれの解決策には利点とトレードオフが存在します。これがPythonでディレクトリの内容をリスト化する場合の状況です。

このチュートリアルでは、ディレクトリ内のアイテムをリストするための最も汎用的な技術に焦点を当てますが、いくつかの代替ツールについても学習します。

最初は文字列としてパスを扱うことは問題ありませんが、複数のオペレーティングシステムを組み合わせると、より複雑になります。また、ファイルパスとは何かとはかなり抽象化された文字列操作に関連するコードがたくさん出てきます。状況はすぐに複雑になる可能性があります。

これは、文字列としてのパスを扱うことが不可能であるというわけではありません。実際、開発者は長い間pathlibを使用せずにうまくやってきました!pathlibモジュールは、トリッキーな部分の多くを処理してくれ、コードの主要なロジックに集中することができます。

すべてはPathオブジェクトの作成から始まります。このオブジェクトは、使用しているオペレーティングシステム(OS)によって異なります。Windowsでは、WindowsPathオブジェクトが返され、LinuxとmacOSではPosixPathが返されます。

以下は、それぞれのオペレーティングシステムにおける例です。

Windows:

import pathlib
desktop = pathlib.Path("C:/Users/RealPython/Desktop")
desktop

Linux + macOS:

import pathlib
desktop = pathlib.Path("/home/RealPython/Desktop")
desktop

これらのOSに特化したオブジェクトを使用することで、さまざまなメソッドとプロパティを利用することができます。

ディレクトリ内のすべてのファイルとフォルダのリストを取得する

pathlibモジュールを使用してディレクトリ内のアイテムのリストを取得するには、次のメソッドを使用します。

import pathlib
# ディレクトリパスの作成
directory = pathlib.Path("path/to/directory")
# ディレクトリ内のすべてのアイテムをリスト化
items = directory.iterdir()
# リストの表示
for item in items:
print(item)

これにより、指定したディレクトリ内のすべてのファイルとフォルダがリストとして取得されます。

.rglob()を使用した再帰的なリスト化

特定のディレクトリ内のすべてのファイルとサブフォルダを含むリストを作成するには、.rglob()メソッドを使用します。

import pathlib
# ディレクトリパスの作成
directory = pathlib.Path("path/to/directory")
# ディレクトリ内のすべてのファイルとサブフォルダを再帰的にリスト化
items = directory.rglob("*")
# リストの表示
for item in items:
print(item)

これにより、指定されたディレクトリ内のすべてのファイルとサブフォルダが再帰的にリスト化されます。

条件付きリストを作成するためのPythonのグロブパターンの使用

条件に基づいてファイルをリスト化するために、Pythonのグロブパターンを使用することもできます。

.glob()を使用した条件付きリスト

特定の拡張子を持つファイルのみをリスト化するには、.glob()メソッドを使用します。

import pathlib
# ディレクトリパスの作成
directory = pathlib.Path("path/to/directory")
# 特定の拡張子を持つファイルのリスト化
items = directory.glob("*.txt")
# リストの表示
for item in items:
print(item)

これにより、指定されたディレクトリ内の拡張子が.txtであるファイルのリストが取得されます。

.rglob()を使用した条件付きリスト

再帰的にファイルを検索するには、.rglob()メソッドを使用します。

import pathlib
# ディレクトリパスの作成
directory = pathlib.Path("path/to/directory")
# 特定の拡張子を持つファイルのリスト化
items = directory.rglob("*.py")
# リストの表示
for item in items:
print(item)

これにより、指定されたディレクトリとそのサブディレクトリ内の拡張子が.pyであるすべてのファイルがリストとして取得されます。

ジャンクディレクトリのリスト化回避

特定のディレクトリをリストから除外することもできます。

.rglob()を使用して整理されたディレクトリをフィルタリングする

.rglob()メソッドを使用して特定のディレクトリをフィルタリングすることができます。

import pathlib
# ディレクトリパスの作成
directory = pathlib.Path("path/to/directory")
# 特定のディレクトリをフィルタリング
items = [item for item in directory.rglob("*") if not item.is_dir()]
# フィルタリングされたリストの表示
for item in items:
print(item)

これにより、指定したディレクトリ内のすべてのファイルがリストに含まれ、ディレクトリは除外されます。

再帰的な.iterdir()関数の作成

以下のコードを使用して、再帰的にディレクトリ内のすべてのファイルをリストする.iterdir()関数を作成することもできます。

import pathlib
# 再帰的な.iterdir()関数の作成
def list_files(directory):
items = []
for item in directory.iterdir():
if item.is_file():
items.append(item)
elif item.is_dir():
items.extend(list_files(item))
return items
# ディレクトリパスの作成
directory = pathlib.Path("path/to/directory")
# リストの表示
for item in list_files(directory):
print(item)

これにより、指定したディレクトリ内のすべてのファイルが再帰的にリスト化されます。

結論

Pythonを使用してディレクトリ内のファイルをリスト化する方法について学びました。pathlibモジュールを使うことで、さまざまな方法でディレクトリ内のファイルをリスト化することができます。

ご紹介した方法を使用して、プロジェクトやデータ処理のニーズに応じてディレクトリ内のファイルを効率的に取得してください。

以上が、Pythonでディレクトリ内のファイルをリスト化する方法に関するチュートリアルでした。