Pythonでファイル名・ディレクトリ名の一覧をリストで取得する方法
Pythonでディレクトリ内のファイルやフォルダの一覧を取得することは、ファイル操作の基本的な処理です。本記事では、osモジュール、pathlibモジュール、globモジュールを使った様々な方法を解説します。
os.listdir()を使用した基本的な方法
すべてのファイル・ディレクトリの取得
import os
files = os.listdir(".")
print(files) # ['file1.txt', 'file2.py', 'folder1', 'folder2']
ファイルのみを取得
import os
path = "."
files = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))]
print(files) # ['file1.txt', 'file2.py']
ディレクトリのみを取得
import os
path = "."
dirs = [d for d in os.listdir(path) if os.path.isdir(os.path.join(path, d))]
print(dirs) # ['folder1', 'folder2']
pathlibを使用したモダンな方法
すべてのファイル・ディレクトリの取得
from pathlib import Path
path = Path(".")
items = [item.name for item in path.iterdir()]
print(items) # ['file1.txt', 'file2.py', 'folder1', 'folder2']
ファイルのみを取得
from pathlib import Path
path = Path(".")
files = [f.name for f in path.iterdir() if f.is_file()]
print(files) # ['file1.txt', 'file2.py']
ディレクトリのみを取得
from pathlib import Path
path = Path(".")
dirs = [d.name for d in path.iterdir() if d.is_dir()]
print(dirs) # ['folder1', 'folder2']
globを使用したパターンマッチング
特定の拡張子のファイルを取得
import glob
txt_files = glob.glob("*.txt")
print(txt_files) # ['file1.txt', 'data.txt']
py_files = glob.glob("*.py")
print(py_files) # ['main.py', 'utils.py']
pathlibのglob機能
from pathlib import Path
path = Path(".")
txt_files = list(path.glob("*.txt"))
print([f.name for f in txt_files]) # ['file1.txt', 'data.txt']
高度な使用例
隠しファイルを除外した一覧取得
from pathlib import Path
path = Path(".")
visible_files = [f.name for f in path.iterdir()
if f.is_file() and not f.name.startswith('.')]
print(visible_files)
ファイル情報付きの一覧取得
from pathlib import Path
import os
path = Path(".")
file_info = []
for item in path.iterdir():
if item.is_file():
size = item.stat().st_size
file_info.append({
'name': item.name,
'size': size,
'type': 'file'
})
else:
file_info.append({
'name': item.name,
'type': 'directory'
})
for info in file_info:
print(info)
複数の拡張子をまとめて取得
from pathlib import Path
path = Path(".")
extensions = ['.txt', '.py', '.md']
files = []
for ext in extensions:
files.extend(path.glob(f"*{ext}"))
print([f.name for f in files])
os.walk()を使用したサブディレクトリ含む取得
再帰的にすべてのファイルを取得
import os
all_files = []
for root, dirs, files in os.walk("."):
for file in files:
all_files.append(os.path.join(root, file))
print(all_files[:5]) # 最初の5件を表示
まとめ
ファイル・ディレクトリの一覧取得には複数の方法があります。単純な一覧取得にはos.listdir()、より高機能で読みやすいコードにはpathlib、パターンマッチングにはglobを使用することをおすすめします。用途に応じて適切な方法を選択し、効率的なファイル操作を実現しましょう。
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座


