
はじめに
第17回では shutil.copy() を使って 簡易バックアップツール を作ったな。
今回はファイル操作の基礎をもう一歩進めて、「フォルダ内のファイル一覧表示ツール」 を作るで!
目的のフォルダに何が入っているか、ファイル名/サイズ/更新日時 まで確認できる実用ツールや。
まずは最小構成 → ちょい改良 → 実務でも使える拡張の順に仕上げていこう。
完成イメージ
(例:./data を対象に実行)
=== ./data の一覧 === report.csv image.png memo.txt
改良版ではこんな表示に:
report.csv 12.3 KB 2025-06-20 14:02:11 image.png 245.8 KB 2025-07-01 09:45:03 memo.txt 0.8 KB 2025-07-10 21:30:55
ヒント(使う要素)
import os→os.listdir(path)で中身を取得pathlib.Path→ ファイルサイズ・更新日時取得が書きやすいstat().st_size/stat().st_mtime→ サイズ・更新時刻datetime.fromtimestamp()→ タイムスタンプを人が読める形に変換
コード全文(基本版):最小構成。まずは「名前だけ列挙」からスタートや。
# Lesson 18: フォルダ内のファイル一覧表示(基本版)
import os
target = "./" # 調べたいフォルダ(例: "./data")
print(f"=== {target} の一覧 ===")
try:
for name in os.listdir(target):
print(name)
except FileNotFoundError:
print("エラー:指定したフォルダが見つかりません。")
改良版(サイズ&更新日時を表示):pathlib を使うと読みやすく拡張しやすいで!
# Lesson 18: フォルダ内のファイル一覧表示(改良版)
from pathlib import Path
from datetime import datetime
def human_size(bytes_val: int) -> str:
units = ["B", "KB", "MB", "GB", "TB"]
size = float(bytes_val)
i = 0
while size >= 1024 and i < len(units) - 1:
size /= 1024
i += 1
return f"{size:.1f} {units[i]}"
target = Path("./") # 例: Path("./data")
if not target.exists() or not target.is_dir():
print("エラー:指定したパスがフォルダではありません。")
else:
rows = []
for p in target.iterdir():
if p.is_file():
st = p.stat()
size = human_size(st.st_size)
mtime = datetime.fromtimestamp(st.st_mtime).strftime("%Y-%m-%d %H:%M:%S")
rows.append((p.name, size, mtime))
# 名前でソート(サイズ降順や更新日時降順にしたい場合は key を変える)
rows.sort(key=lambda x: x[0].lower())
for name, size, mtime in rows:
print(f"{name:<20} {size:>8} {mtime}")
さらに一歩:拡張版(拡張子フィルタ & 再帰表示)
**/*.csvのように特定拡張子だけ- サブフォルダも含めて再帰的に列挙
# Lesson 18: ファイル一覧(拡張版:拡張子フィルタ & 再帰)
from pathlib import Path
from datetime import datetime
def list_files(base: Path, pattern: str = "*", recursive: bool = False):
globber = base.rglob(pattern) if recursive else base.glob(pattern)
for p in globber:
if p.is_file():
st = p.stat()
dt = datetime.fromtimestamp(st.st_mtime).strftime("%Y-%m-%d %H:%M:%S")
print(f"{p.relative_to(base)} ({st.st_size}B) {dt}")
base = Path("./data") # 対象フォルダ
print("=== CSVのみ(再帰なし)===")
list_files(base, pattern="*.csv", recursive=False)
print("\n=== すべて(再帰あり)===")
list_files(base, pattern="*", recursive=True)
実行方法
- VSCodeで新しいファイルを作成
- いずれかのコードをコピペして
lesson18.pyとして保存 - ターミナルで実行:
python lesson18.py(動かへん場合はpython3 lesson18.py)
応用アイデア
- 並べ替え:サイズ降順・更新日時降順などでソート
- CSV出力:一覧結果を
files.csvに保存(監査・台帳用) - 除外パターン:
__pycache__などをスキップ - GUI化:フォルダ選択ダイアログ(
tkinter.filedialog)と連携
まとめ
今回は 「フォルダ内のファイル一覧表示」 を作ったで!os / pathlib を使うと、名前列挙からサイズ・更新日時・フィルタ・再帰まで柔軟に扱えるようになる。
実務でも使える“ちょうどいい”ツールの第一歩や。
👉 次回は Lesson 19: 重複行削除ツール。
テキスト内の重複行を消してスッキリ整形するアプリを作るで!