[Python] 指定したディレクトリにあるファイル名一覧を取得する方法
Pythonで指定したディレクトリにあるファイル名一覧を取得するには、標準ライブラリのos
モジュールやpathlib
モジュールを使用します。
os
モジュールではos.listdir()
を使い、指定したディレクトリ内のファイルやディレクトリの名前をリストとして取得できます。
pathlib
モジュールでは、Path
オブジェクトのiterdir()メソッド
を使ってファイル名を取得できます。
どちらも簡単にディレクトリ内のファイルをリスト化できます。
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
を使用することで、視覚的にファイル名を確認することができます。
まとめ
この記事では、Pythonを使用して指定したディレクトリにあるファイル名一覧を取得する方法について詳しく解説しました。
os
モジュールやpathlib
モジュールを活用することで、ファイル名の取得やフィルタリング、さらにはファイル名を使ったさまざまな操作が可能になります。
これらの知識を活用して、実際のプロジェクトや日常のタスクに役立ててみてください。
ファイル操作のスキルを向上させることで、より効率的なプログラミングが実現できるでしょう。