[Python] 指定フォルダ内のフォルダ名の一覧を取得する方法
Pythonで指定フォルダ内のフォルダ名の一覧を取得するには、標準ライブラリのos
モジュールやpathlib
モジュールを使用します。
os
モジュールではos.listdir()
やos.scandir()
を使い、pathlib
モジュールではPath.iterdir()
を使います。
これらのメソッドでディレクトリ内の全てのエントリを取得し、os.path.isdir()
やPath.is_dir()
でフォルダかどうかを判定してフォルダ名のみを抽出します。
フォルダ名の一覧を取得する基本的な方法
Pythonでは、指定したフォルダ内のフォルダ名を取得するために、主にos
モジュールとpathlib
モジュールを使用します。
以下では、それぞれの方法について詳しく解説します。
osモジュールを使ったフォルダ名の取得
os.listdir()を使う方法
os.listdir()関数
は、指定したディレクトリ内の全てのファイルとフォルダの名前をリストとして返します。
以下はその使用例です。
import os
# 指定したフォルダのパス
folder_path = '指定したフォルダのパス'
# フォルダ内の全てのファイルとフォルダ名を取得
folder_names = os.listdir(folder_path)
# フォルダ名を表示
print(folder_names)
['フォルダ1', 'フォルダ2', 'ファイル1.txt', 'ファイル2.txt']
この方法では、フォルダとファイルが混在したリストが返されるため、フォルダのみを抽出する必要があります。
os.scandir()を使う方法
os.scandir()関数
は、指定したディレクトリ内のエントリをイテレートし、各エントリの情報を取得できます。
これにより、フォルダのみを簡単にフィルタリングできます。
import os
# 指定したフォルダのパス
folder_path = '指定したフォルダのパス'
# フォルダ内のエントリを取得
with os.scandir(folder_path) as entries:
folder_names = [entry.name for entry in entries if entry.is_dir()]
# フォルダ名を表示
print(folder_names)
['フォルダ1', 'フォルダ2']
この方法では、フォルダのみをリストに格納することができます。
os.walk()を使う方法
os.walk()関数
は、指定したディレクトリ以下の全てのフォルダとファイルを再帰的に取得します。
これを利用して、特定のフォルダ内のフォルダ名を取得することができます。
import os
# 指定したフォルダのパス
folder_path = '指定したフォルダのパス'
# フォルダ内の全てのフォルダ名を取得
folder_names = [dirpath for dirpath, dirnames, filenames in os.walk(folder_path) for dirname in dirnames]
# フォルダ名を表示
print(folder_names)
['指定したフォルダのパス/フォルダ1', '指定したフォルダのパス/フォルダ2']
この方法では、サブフォルダも含めて全てのフォルダ名を取得できます。
pathlibモジュールを使ったフォルダ名の取得
pathlib
モジュールは、パス操作をオブジェクト指向で行うための便利なモジュールです。
以下では、pathlib
を使ったフォルダ名の取得方法を紹介します。
Path.iterdir()を使う方法
Path.iterdir()メソッド
は、指定したパス内の全てのエントリをイテレートし、フォルダ名を取得することができます。
from pathlib import Path
# 指定したフォルダのパス
folder_path = Path('指定したフォルダのパス')
# フォルダ内の全てのエントリを取得
folder_names = [entry.name for entry in folder_path.iterdir() if entry.is_dir()]
# フォルダ名を表示
print(folder_names)
['フォルダ1', 'フォルダ2']
この方法も、フォルダのみを簡単に取得できます。
Path.glob()を使う方法
Path.glob()メソッド
は、指定したパターンに一致するファイルやフォルダを取得することができます。
以下は、全てのフォルダを取得する例です。
from pathlib import Path
# 指定したフォルダのパス
folder_path = Path('指定したフォルダのパス')
# フォルダ内の全てのフォルダ名を取得
folder_names = [entry.name for entry in folder_path.glob('*') if entry.is_dir()]
# フォルダ名を表示
print(folder_names)
['フォルダ1', 'フォルダ2']
この方法では、特定のパターンに基づいてフォルダを取得することができます。
Path.rglob()を使う方法
Path.rglob()メソッド
は、再帰的に指定したパターンに一致するファイルやフォルダを取得します。
これを利用して、サブフォルダも含めたフォルダ名を取得できます。
from pathlib import Path
# 指定したフォルダのパス
folder_path = Path('指定したフォルダのパス')
# フォルダ内の全てのフォルダ名を取得
folder_names = [entry.name for entry in folder_path.rglob('*') if entry.is_dir()]
# フォルダ名を表示
print(folder_names)
['フォルダ1', 'フォルダ2', 'サブフォルダ1', 'サブフォルダ2']
この方法では、指定したフォルダ以下の全てのフォルダ名を取得することができます。
フォルダ名のフィルタリング
フォルダ名を取得した後、特定の条件に基づいてフォルダをフィルタリングすることがよくあります。
ここでは、フォルダのみを抽出する方法と、特定の条件でフォルダをフィルタリングする方法について解説します。
フォルダのみを抽出する方法
フォルダ名を取得した際に、ファイルも含まれている場合があります。
ここでは、フォルダのみを抽出する方法を紹介します。
os.path.isdir()を使った判定
os.path.isdir()関数
を使用して、取得したエントリがフォルダかどうかを判定することができます。
以下はその使用例です。
import os
# 指定したフォルダのパス
folder_path = '指定したフォルダのパス'
# フォルダ内の全てのエントリを取得
all_entries = os.listdir(folder_path)
# フォルダのみを抽出
folder_names = [entry for entry in all_entries if os.path.isdir(os.path.join(folder_path, entry))]
# フォルダ名を表示
print(folder_names)
['フォルダ1', 'フォルダ2']
この方法では、os.path.isdir()
を使って、各エントリがフォルダであるかを確認しています。
Path.is_dir()を使った判定
pathlib
モジュールを使用する場合、Path.is_dir()メソッド
を使ってフォルダかどうかを判定できます。
以下はその例です。
from pathlib import Path
# 指定したフォルダのパス
folder_path = Path('指定したフォルダのパス')
# フォルダ内の全てのエントリを取得
all_entries = folder_path.iterdir()
# フォルダのみを抽出
folder_names = [entry.name for entry in all_entries if entry.is_dir()]
# フォルダ名を表示
print(folder_names)
['フォルダ1', 'フォルダ2']
この方法では、Path.is_dir()
を使って、各エントリがフォルダであるかを確認しています。
特定の条件でフォルダをフィルタリングする
フォルダ名を取得した後、特定の条件に基づいてフィルタリングすることも可能です。
以下では、フォルダ名に特定の文字列が含まれる場合と、特定のパターンに一致する場合について解説します。
フォルダ名に特定の文字列が含まれる場合
特定の文字列がフォルダ名に含まれている場合にフィルタリングする方法です。
以下はその例です。
import os
# 指定したフォルダのパス
folder_path = '指定したフォルダのパス'
# フォルダ内の全てのエントリを取得
all_entries = os.listdir(folder_path)
# 特定の文字列を含むフォルダのみを抽出
keyword = '特定の文字列'
folder_names = [entry for entry in all_entries if os.path.isdir(os.path.join(folder_path, entry)) and keyword in entry]
# フォルダ名を表示
print(folder_names)
['特定の文字列を含むフォルダ1', '特定の文字列を含むフォルダ2']
この方法では、指定した文字列がフォルダ名に含まれているかを確認しています。
フォルダ名が特定のパターンに一致する場合
フォルダ名が特定のパターンに一致する場合にフィルタリングする方法です。
以下はその例です。
from pathlib import Path
# 指定したフォルダのパス
folder_path = Path('指定したフォルダのパス')
# フォルダ内の全てのエントリを取得
all_entries = folder_path.iterdir()
# 特定のパターンに一致するフォルダのみを抽出
pattern = '特定のパターン*'
folder_names = [entry.name for entry in all_entries if entry.is_dir() and entry.match(pattern)]
# フォルダ名を表示
print(folder_names)
['特定のパターン1', '特定のパターン2']
この方法では、Path.match()メソッド
を使用して、フォルダ名が特定のパターンに一致するかを確認しています。
応用例
フォルダ名の取得やフィルタリングの基本的な方法を理解した後、さらに応用的な操作を行うことができます。
ここでは、サブフォルダの再帰的取得、フォルダ名のソート、フォルダ名のファイルへの保存方法について解説します。
サブフォルダを再帰的に取得する方法
サブフォルダを再帰的に取得することで、指定したフォルダ以下の全てのフォルダを取得することができます。
os.walk()を使った再帰的取得
os.walk()関数
を使用すると、指定したディレクトリ以下の全てのフォルダとファイルを再帰的に取得できます。
以下はその使用例です。
import os
# 指定したフォルダのパス
folder_path = '指定したフォルダのパス'
# サブフォルダを再帰的に取得
folder_names = []
for dirpath, dirnames, filenames in os.walk(folder_path):
for dirname in dirnames:
folder_names.append(os.path.join(dirpath, dirname))
# フォルダ名を表示
print(folder_names)
['指定したフォルダのパス/フォルダ1', '指定したフォルダのパス/フォルダ2', '指定したフォルダのパス/フォルダ1/サブフォルダ1']
この方法では、全てのサブフォルダを含むリストを取得できます。
Path.rglob()を使った再帰的取得
pathlib
モジュールのPath.rglob()メソッド
を使用することで、再帰的にフォルダを取得することも可能です。
from pathlib import Path
# 指定したフォルダのパス
folder_path = Path('指定したフォルダのパス')
# サブフォルダを再帰的に取得
folder_names = [entry for entry in folder_path.rglob('*') if entry.is_dir()]
# フォルダ名を表示
print(folder_names)
[PosixPath('指定したフォルダのパス/フォルダ1'), PosixPath('指定したフォルダのパス/フォルダ2'), PosixPath('指定したフォルダのパス/フォルダ1/サブフォルダ1')]
この方法では、全てのサブフォルダを簡単に取得できます。
フォルダ名をソートして取得する方法
取得したフォルダ名を特定の基準でソートすることも可能です。
アルファベット順にソート
フォルダ名をアルファベット順にソートする方法です。
import os
# 指定したフォルダのパス
folder_path = '指定したフォルダのパス'
# フォルダ内の全てのエントリを取得
folder_names = [entry for entry in os.listdir(folder_path) if os.path.isdir(os.path.join(folder_path, entry))]
# アルファベット順にソート
folder_names.sort()
# フォルダ名を表示
print(folder_names)
['フォルダ1', 'フォルダ2', 'フォルダ3']
この方法では、フォルダ名をアルファベット順に整列させることができます。
作成日時順にソート
フォルダ名を作成日時順にソートする方法です。
import os
# 指定したフォルダのパス
folder_path = '指定したフォルダのパス'
# フォルダ内の全てのエントリを取得
folder_names = [entry for entry in os.listdir(folder_path) if os.path.isdir(os.path.join(folder_path, entry))]
# 作成日時順にソート
folder_names.sort(key=lambda x: os.path.getctime(os.path.join(folder_path, x)))
# フォルダ名を表示
print(folder_names)
['古いフォルダ', '新しいフォルダ']
この方法では、フォルダの作成日時に基づいてソートすることができます。
フォルダ名をファイルに保存する方法
取得したフォルダ名をファイルに保存することもできます。
ここでは、テキストファイルとCSVファイルへの保存方法を紹介します。
テキストファイルに保存
フォルダ名をテキストファイルに保存する方法です。
import os
# 指定したフォルダのパス
folder_path = '指定したフォルダのパス'
# フォルダ内の全てのエントリを取得
folder_names = [entry for entry in os.listdir(folder_path) if os.path.isdir(os.path.join(folder_path, entry))]
# テキストファイルに保存
with open('folder_names.txt', 'w', encoding='utf-8') as f:
for name in folder_names:
f.write(name + '\n')
このコードを実行すると、folder_names.txt
というファイルにフォルダ名が保存されます。
CSVファイルに保存
フォルダ名をCSVファイルに保存する方法です。
import os
import csv
# 指定したフォルダのパス
folder_path = '指定したフォルダのパス'
# フォルダ内の全てのエントリを取得
folder_names = [entry for entry in os.listdir(folder_path) if os.path.isdir(os.path.join(folder_path, entry))]
# CSVファイルに保存
with open('folder_names.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
for name in folder_names:
writer.writerow([name])
このコードを実行すると、folder_names.csv
というファイルにフォルダ名が保存されます。
まとめ
この記事では、Pythonを使用して指定フォルダ内のフォルダ名を取得する方法について詳しく解説しました。
具体的には、os
モジュールやpathlib
モジュールを利用したフォルダ名の取得、フォルダ名のフィルタリング、サブフォルダの再帰的取得、フォルダ名のソート、さらにはフォルダ名をファイルに保存する方法について触れました。
これらの知識を活用することで、ファイルシステムを効率的に操作し、必要な情報を迅速に取得することが可能になります。
ぜひ、実際のプロジェクトや日常のタスクにこれらのテクニックを取り入れて、Pythonプログラミングのスキルをさらに向上させてください。