
はじめに
第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: 重複行削除ツール。
テキスト内の重複行を消してスッキリ整形するアプリを作るで!