[Python] 指定したディレクトリにあるファイル名一覧を取得する方法

Pythonで指定したディレクトリにあるファイル名一覧を取得するには、標準ライブラリのosモジュールやpathlibモジュールを使用します。

osモジュールではos.listdir()を使い、指定したディレクトリ内のファイルやディレクトリの名前をリストとして取得できます。

pathlibモジュールでは、Pathオブジェクトのiterdir()メソッドを使ってファイル名を取得できます。

どちらも簡単にディレクトリ内のファイルをリスト化できます。

この記事でわかること
  • osモジュールを使ったファイル名取得方法
  • pathlibモジュールの基本的な使い方
  • ファイル名のフィルタリング手法
  • ファイル名一覧を活用した操作例
  • エラー発生時の対処法

目次から探す

osモジュールを使ったファイル名一覧の取得方法

Pythonのosモジュールを使用すると、指定したディレクトリ内のファイル名を簡単に取得できます。

以下では、os.listdir()を使った基本的な方法から、サブディレクトリ内のファイルを再帰的に取得する方法まで解説します。

os.listdir()の基本的な使い方

os.listdir()関数は、指定したディレクトリ内のファイルとディレクトリの名前をリストとして返します。

以下はその基本的な使い方の例です。

import os
# 指定したディレクトリのパス
directory_path = '指定したディレクトリのパス'
# ディレクトリ内のファイル名一覧を取得
file_list = os.listdir(directory_path)
# 結果を表示
print(file_list)
['file1.txt', 'file2.py', 'directory1', 'directory2']

このコードでは、指定したディレクトリ内のファイル名とディレクトリ名がリストとして取得され、表示されます。

絶対パスと相対パスの指定方法

os.listdir()を使用する際、ディレクトリのパスは絶対パスまたは相対パスで指定できます。

以下にそれぞれの例を示します。

スクロールできます
パスの種類
絶対パス/home/user/documents
相対パス./documents

絶対パスはファイルシステムのルートからの完全なパスを示し、相対パスは現在の作業ディレクトリからの相対的な位置を示します。

ファイルとディレクトリの区別

os.listdir()で取得したリストには、ファイルとディレクトリの両方が含まれます。

ファイルとディレクトリを区別するには、os.pathモジュールのisfile()isdir()関数を使用します。

以下はその例です。

import os
directory_path = '指定したディレクトリのパス'
file_list = os.listdir(directory_path)
for name in file_list:
    full_path = os.path.join(directory_path, name)
    if os.path.isfile(full_path):
        print(f"{name} はファイルです。")
    elif os.path.isdir(full_path):
        print(f"{name} はディレクトリです。")
file1.txt はファイルです。
directory1 はディレクトリです。

サブディレクトリ内のファイルを再帰的に取得する方法

サブディレクトリ内のファイルも含めて一覧を取得するには、os.walk()関数を使用します。

この関数は、指定したディレクトリ以下の全てのファイルとディレクトリを再帰的に取得します。

以下はその例です。

import os
directory_path = '指定したディレクトリのパス'
# サブディレクトリ内のファイルを再帰的に取得
for root, dirs, files in os.walk(directory_path):
    for file in files:
        print(os.path.join(root, file))
/path/to/directory/file1.txt
/path/to/directory/subdirectory/file2.py

このコードでは、指定したディレクトリとそのサブディレクトリ内の全てのファイルのパスが表示されます。

pathlibモジュールを使ったファイル名一覧の取得方法

Pythonのpathlibモジュールは、ファイルシステムのパスをオブジェクト指向で扱うための便利な機能を提供します。

ここでは、pathlibを使用して指定したディレクトリ内のファイル名を取得する方法を解説します。

pathlib.Pathの基本的な使い方

pathlibモジュールのPathクラスを使用すると、パスを簡単に操作できます。

以下はその基本的な使い方の例です。

from pathlib import Path
# 指定したディレクトリのパス
directory_path = Path('指定したディレクトリのパス')
# ディレクトリの存在確認
if directory_path.exists() and directory_path.is_dir():
    print("ディレクトリが存在します。")
else:
    print("ディレクトリが存在しません。")
ディレクトリが存在します。

このコードでは、指定したパスがディレクトリであるかどうかを確認し、結果を表示します。

Path.iterdir()を使ったファイル名の取得

Path.iterdir()メソッドを使用すると、指定したディレクトリ内のファイルとディレクトリを簡単に取得できます。

以下はその例です。

from pathlib import Path
# 指定したディレクトリのパス
directory_path = Path('指定したディレクトリのパス')
# ディレクトリ内のファイル名一覧を取得
for item in directory_path.iterdir():
    print(item.name)
file1.txt
file2.py
directory1
directory2

このコードでは、指定したディレクトリ内の全てのファイル名とディレクトリ名が表示されます。

ファイルとディレクトリの区別

Path.iterdir()で取得したアイテムは、ファイルとディレクトリの両方が含まれます。

ファイルとディレクトリを区別するには、is_file()is_dir()メソッドを使用します。

以下はその例です。

from pathlib import Path
directory_path = Path('指定したディレクトリのパス')
for item in directory_path.iterdir():
    if item.is_file():
        print(f"{item.name} はファイルです。")
    elif item.is_dir():
        print(f"{item.name} はディレクトリです。")
file1.txt はファイルです。
directory1 はディレクトリです。

サブディレクトリ内のファイルを再帰的に取得する方法

サブディレクトリ内のファイルも含めて一覧を取得するには、Path.rglob()メソッドを使用します。

このメソッドは、指定したパターンにマッチする全てのファイルを再帰的に取得します。

以下はその例です。

from pathlib import Path
directory_path = Path('指定したディレクトリのパス')
# サブディレクトリ内のファイルを再帰的に取得
for file in directory_path.rglob('*'):
    if file.is_file():
        print(file)
/path/to/directory/file1.txt
/path/to/directory/subdirectory/file2.py

このコードでは、指定したディレクトリとそのサブディレクトリ内の全てのファイルのパスが表示されます。

rglob('*')を使用することで、全てのファイルを対象にすることができます。

ファイル名フィルタリングの方法

ファイル名をフィルタリングすることで、特定の条件に合ったファイルのみを取得することができます。

ここでは、拡張子でのフィルタリング、特定の文字列を含むファイル名の取得、正規表現を使ったフィルタリングの方法を解説します。

拡張子でフィルタリングする方法

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

以下はその例です。

from pathlib import Path
# 指定したディレクトリのパス
directory_path = Path('指定したディレクトリのパス')
# 拡張子が.txtのファイルを取得
for file in directory_path.glob('*.txt'):
    print(file.name)
file1.txt
file2.txt

このコードでは、指定したディレクトリ内の全ての.txtファイルが表示されます。

glob('*.txt')を使用することで、特定の拡張子を持つファイルを簡単に取得できます。

特定の文字列を含むファイル名の取得

ファイル名に特定の文字列を含むファイルを取得するには、in演算子を使用して条件を指定します。

以下はその例です。

from pathlib import Path
# 指定したディレクトリのパス
directory_path = Path('指定したディレクトリのパス')
search_string = '特定の文字列'
# 特定の文字列を含むファイル名を取得
for file in directory_path.iterdir():
    if file.is_file() and search_string in file.name:
        print(file.name)
example特定の文字列.txt
test_特定の文字列.py

このコードでは、指定したディレクトリ内のファイル名に特定の文字列が含まれるファイルが表示されます。

正規表現を使ったファイル名のフィルタリング

正規表現を使用すると、より複雑な条件でファイル名をフィルタリングできます。

reモジュールを使用して、正規表現パターンにマッチするファイル名を取得する方法を以下に示します。

import re
from pathlib import Path
# 指定したディレクトリのパス
directory_path = Path('指定したディレクトリのパス')
pattern = r'^[a-zA-Z]+\.txt$'  # アルファベットで始まり、.txtで終わるファイル名
# 正規表現にマッチするファイル名を取得
for file in directory_path.iterdir():
    if file.is_file() and re.match(pattern, file.name):
        print(file.name)
example.txt
test.txt

このコードでは、指定したディレクトリ内のファイル名がアルファベットで始まり、.txtで終わるファイルが表示されます。

正規表現を使用することで、柔軟なフィルタリングが可能になります。

応用例:ファイル名一覧を使った操作

ファイル名の一覧を取得した後、さまざまな操作を行うことができます。

ここでは、ファイル名一覧をテキストファイルに保存する方法、一括処理を行う方法、ファイル名をソートして取得する方法、そしてGUIで表示する方法について解説します。

ファイル名一覧をテキストファイルに保存する

取得したファイル名の一覧をテキストファイルに保存するには、open()関数を使用してファイルを書き込みモードで開き、リストの内容をファイルに書き込みます。

以下はその例です。

from pathlib import Path
# 指定したディレクトリのパス
directory_path = Path('指定したディレクトリのパス')
# ファイル名一覧を取得
file_list = [file.name for file in directory_path.iterdir() if file.is_file()]
# テキストファイルに保存
with open('file_list.txt', 'w', encoding='utf-8') as f:
    for file_name in file_list:
        f.write(file_name + '\n')

このコードでは、指定したディレクトリ内のファイル名を取得し、file_list.txtというテキストファイルに保存します。

ファイル名を使って一括処理を行う

ファイル名を使って一括処理を行う場合、例えば、全てのテキストファイルを読み込んで内容を表示することができます。

以下はその例です。

from pathlib import Path
# 指定したディレクトリのパス
directory_path = Path('指定したディレクトリのパス')
# テキストファイルを一括処理
for file in directory_path.glob('*.txt'):
    with open(file, 'r', encoding='utf-8') as f:
        content = f.read()
        print(f"{file.name} の内容:\n{content}\n")

このコードでは、指定したディレクトリ内の全ての.txtファイルを読み込み、その内容を表示します。

ファイル名をソートして取得する方法

ファイル名をソートして取得するには、sorted()関数を使用します。

以下はその例です。

from pathlib import Path
# 指定したディレクトリのパス
directory_path = Path('指定したディレクトリのパス')
# ファイル名一覧を取得し、ソート
file_list = sorted([file.name for file in directory_path.iterdir() if file.is_file()])
# ソートされたファイル名を表示
for file_name in file_list:
    print(file_name)

このコードでは、指定したディレクトリ内のファイル名を取得し、アルファベット順にソートして表示します。

ファイル名の一覧をGUIで表示する

ファイル名の一覧をGUIで表示するには、tkinterモジュールを使用します。

以下はその例です。

import tkinter as tk
from pathlib import Path
# 指定したディレクトリのパス
directory_path = Path('指定したディレクトリのパス')
# GUIウィンドウの作成
root = tk.Tk()
root.title("ファイル名一覧")
# ファイル名一覧を取得
file_list = [file.name for file in directory_path.iterdir() if file.is_file()]
# リストボックスの作成
listbox = tk.Listbox(root, width=50, height=20)
listbox.pack()
# ファイル名をリストボックスに追加
for file_name in file_list:
    listbox.insert(tk.END, file_name)
# GUIの実行
root.mainloop()

このコードでは、指定したディレクトリ内のファイル名をリストボックスに表示する簡単なGUIアプリケーションを作成します。

tkinterを使用することで、視覚的にファイル名を確認することができます。

よくある質問

os.listdir()とpathlib.Path.iterdir()の違いは?

os.listdir()pathlib.Path.iterdir()はどちらもディレクトリ内のファイルやディレクトリの一覧を取得するためのメソッドですが、いくつかの違いがあります。

  • 戻り値の形式: os.listdir()はリストを返しますが、pathlib.Path.iterdir()はイテレータを返します。

これにより、iterdir()はメモリ効率が良く、大きなディレクトリでも扱いやすいです。

  • オブジェクト指向: pathlibはオブジェクト指向のアプローチを提供し、パス操作をより直感的に行えます。

Pathオブジェクトは、ファイルやディレクトリの情報を簡単に取得できるメソッドを持っています。

  • パスの操作: pathlibを使用すると、パスの結合や操作が簡単に行えます。

例えば、Pathオブジェクト同士を/演算子で結合できますが、osモジュールではos.path.join()を使用する必要があります。

サブディレクトリ内のファイルも含めて一覧を取得するには?

サブディレクトリ内のファイルも含めて一覧を取得するには、osモジュールではos.walk()を使用し、pathlibモジュールではPath.rglob()メソッドを使用します。

  • osモジュールの例:
  import os
  for root, dirs, files in os.walk('指定したディレクトリのパス'):
      for file in files:
          print(os.path.join(root, file))
  • pathlibモジュールの例:
  from pathlib import Path
  for file in Path('指定したディレクトリのパス').rglob('*'):
      if file.is_file():
          print(file)

これにより、指定したディレクトリとそのサブディレクトリ内の全てのファイルを取得できます。

ファイル名一覧を取得する際にエラーが発生した場合の対処法は?

ファイル名一覧を取得する際にエラーが発生する場合、以下の点を確認し、対処することが重要です。

  1. ディレクトリの存在確認: 指定したディレクトリが存在するか確認します。

存在しない場合、FileNotFoundErrorが発生します。

  • 例: if not directory_path.exists(): print("ディレクトリが存在しません。")
  1. アクセス権限の確認: ディレクトリに対する読み取り権限があるか確認します。

権限がない場合、PermissionErrorが発生します。

  • 例: try: os.listdir(directory_path) except PermissionError: print("アクセス権限がありません。")
  1. パスの形式: 指定したパスが正しい形式であるか確認します。

特に、相対パスや絶対パスの指定に注意が必要です。

  1. 例外処理の実装: エラーが発生した場合に備えて、tryexceptを使用して例外処理を実装します。
  • 例:
   try:
       file_list = os.listdir(directory_path)
   except Exception as e:
       print(f"エラーが発生しました: {e}")

これらの対処法を実施することで、エラーを適切に処理し、ファイル名一覧を取得する際の問題を軽減できます。

まとめ

この記事では、Pythonを使用して指定したディレクトリにあるファイル名一覧を取得する方法について詳しく解説しました。

osモジュールやpathlibモジュールを活用することで、ファイル名の取得やフィルタリング、さらにはファイル名を使ったさまざまな操作が可能になります。

これらの知識を活用して、実際のプロジェクトや日常のタスクに役立ててみてください。

ファイル操作のスキルを向上させることで、より効率的なプログラミングが実現できるでしょう。

  • URLをコピーしました!
目次から探す