コンテンツにスキップ

Pythonチュートリアル:ディレクトリ内のすべてのファイルをリスト化する方法

[

Pythonを使用してディレクトリ内のすべてのファイルをリストにする方法

ファイル関連の操作を行う場合、多くの場合、まずディレクトリの中にあるすべてのファイルとフォルダのリストを取得する必要があります。しかし、これを調べてみると、さまざまな方法があることに驚くかもしれません。

何かを行うための多くの方法がある場合、それは一つの解決策がすべてに適しているわけではないことを示唆する良い指標です。おそらく、それぞれの解決策にはそれぞれの利点とトレードオフがあります。これは、Pythonでディレクトリの内容をリストするための場合にも当てはまります。

このチュートリアルでは、pathlibモジュールの最も汎用的なテクニックに焦点を当てますが、いくつかの代替ツールについても学びます。

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

これは、パスを文字列として扱うのは実行可能でないということを意味しているわけではありません。なぜなら、開発者は多年にわたって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に対応したオブジェクトを使用することで、多くのメソッドやプロパティを利用することができます。

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

ディレクトリ内のすべてのファイルとフォルダのリストを取得するためには、iterdir()メソッドを使用します。これはPathオブジェクトのメソッドであり、ディレクトリ内のすべてのアイテムを表すジェネレータを返します。iterdir()はディレクトリ内の隠しファイルやフォルダも含めてすべてのアイテムをリストアップします。

以下はiterdir()メソッドを使用してディレクトリ内のファイルとフォルダをリストする例です。

import pathlib
directory = pathlib.Path("/path/to/directory")
for item in directory.iterdir():
print(item)

上記のコードでは、/path/to/directoryというディレクトリ内のすべてのアイテムをリストアップしています。iterdir()メソッドはファイルとフォルダのリストを取得するために非常に便利です。

サブディレクトリを再帰的にリストする

ディレクトリ内のサブディレクトリも含めて再帰的にリストにするには、rglob()メソッドを使用します。rglob()メソッドは、指定されたパターンに一致するすべてのアイテムを再帰的にリストアップします。

以下はrglob()メソッドを使用してすべてのサブディレクトリ内のファイルをリストする例です。

import pathlib
directory = pathlib.Path("/path/to/directory")
for item in directory.rglob("*"):
if item.is_file():
print(item)

上記のコードでは、/path/to/directoryディレクトリ内のすべてのファイルを再帰的にリストしています。rglob()メソッドの引数にはワイルドカードパターンを指定します。上記の例では、*を使用してすべてのファイルに一致させています。

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

限定的な条件でファイルとフォルダのリストを作成するために、PythonのGlobパターンを使用することができます。GlobパターンはUNIXスタイルのワイルドカードを使用して、特定のファイルパターンに一致するアイテムをリストアップします。

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

.glob()メソッドはGlobパターンに一致するアイテムだけをリストアップします。これにより、特定の拡張子を持つファイルのみをリストアップすることができます。

以下は.glob()メソッドを使用して指定された拡張子のファイルのリストを作成する例です。

import pathlib
directory = pathlib.Path("/path/to/directory")
for item in directory.glob("*.txt"):
if item.is_file():
print(item)

上記のコードでは、/path/to/directoryディレクトリ内の.txt拡張子を持つすべてのファイルをリストしています。

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

.rglob()メソッドを使用すると、指定されたパターンに一致するすべてのアイテムを再帰的にリストアップすることができます。これにより、さらに詳細な条件でファイルとフォルダのリストを作成することができます。

以下は.rglob()メソッドを使用して特定のフォルダ内の特定の拡張子を持つファイルをリストする例です。

import pathlib
directory = pathlib.Path("/path/to/directory")
for item in directory.rglob("folder/**/*.csv"):
if item.is_file():
print(item)

上記のコードでは、/path/to/directoryディレクトリ内のfolderフォルダとそのサブフォルダ内の.csv拡張子を持つすべてのファイルをリストしています。rglob()メソッドの引数にはGlobパターンを指定します。上記の例では、folder/**/*.csvを使用して対象のファイルを指定しています。

ジャンクディレクトリを除外する

ディレクトリごとにジャンクディレクトリを除外するには、.rglob()メソッドや再帰的な.iterdir()関数を使用することができます。これにより、不要なフォルダをリストから除外することができます。

.rglob()を使用して全体のディレクトリをフィルタリングする

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

以下は.rglob()メソッドを使用して特定のディレクトリを除外する例です。

import pathlib
directory = pathlib.Path("/path/to/directory")
for item in directory.rglob("*"):
if item.is_file():
print(item)
elif item.is_dir() and "junk" not in item.parts:
print(item)

上記のコードでは、/path/to/directoryディレクトリ内のジャンクディレクトリを除外してリストアップしています。rglob()メソッドで取得したアイテムを、is_file()メソッドやis_dir()メソッドでファイルかディレクトリかを判別し、不要なアイテムを除外しています。

再帰的な.iterdir()関数を作成する

.iterdir()メソッドを再帰的に呼び出す関数を作成することで、特定のディレクトリを除外することもできます。

以下は再帰的な.iterdir()関数を使用して特定のディレクトリを除外する例です。

import pathlib
def recursive_iterdir(path):
for item in path.iterdir():
if item.is_file():
print(item)
elif item.is_dir() and "junk" not in item.parts:
recursive_iterdir(item)
directory = pathlib.Path("/path/to/directory")
recursive_iterdir(directory)

上記のコードでは、/path/to/directoryディレクトリ内のジャンクディレクトリを除外してリストアップしています。再帰的な.iterdir()関数を自己再帰的に呼び出すことで、全体のディレクトリを再帰的に探索して、不要なアイテムを除外しています。

結論

Pythonを使用してディレクトリの内容をリストアップする方法には、いくつかのアプローチがあります。このチュートリアルでは、pathlibモジュールを使用してディレクトリ内のファイルとフォルダをリストアップする基本的な方法を説明しました。

  • iterdir()メソッドを使用してディレクトリ内のファイルとフォルダをリストアップすることができます。
  • .rglob()メソッドを使用してディレクトリ内のサブディレクトリも再帰的にリストアップすることができます。
  • .glob()メソッドを使用してPythonのGlobパターンを使用して条件付きリストを作成することができます。
  • ジャンクディレクトリを除外するために、.rglob()メソッドや再帰的な.iterdir()関数を使用することができます。

これらのテクニックを使って、Pythonを使ってディレクトリ内のファイルとフォルダを効率的にリストアップすることができます。

以上になります。コードのサンプルと共に、ディレクトリ内のファイルをリスト化する方法を詳しく説明しました。Pythonを使って応用的なファイル操作を行う際に参考にしてみてください。