何を作るか:フォルダ直下の一覧を出す
画像素材や納品物を整理する前に、どんなファイルがあるか把握したい。そんな場面向けに、ファイル名・拡張子・バイト数をCSVへ出す小さなツールを作ります。サブフォルダ内の探索、移動、削除、名前変更は行いません。
Python標準のpathlibとcsvを使用します。追加パッケージやAI APIキーは不要です。Pythonが使えるPCで実行してください。
Python未導入の場合は、公式配布ページで自身のOS向けの手順を確認します。ターミナルで python --version を実行し、Python 3のバージョンが出ることを確かめます。
1.サンプルを保存し、練習用フォルダで実行する
新しい作業フォルダにfile_inventory.pyを保存し、その中にsampleフォルダを作ります。sample内へ、テスト用の画像やテキストを二つ置きます。ターミナルの現在位置を作業フォルダにして、次を実行します。
python file_inventory.py sample
Windowsでpythonが使えず、Pythonランチャーが利用できる場合は、pythonをpyに置き換えてください。実行した場所にfile-list.csvが生成されます。日本語のファイル名を扱いやすくするため、出力の文字コードはUTF-8のBOM付きです。
出力がすでにある場合は上書きせず停止します。前のCSVを別名で保存してから再実行してください。
2.コードのポイントを見る
import csv
import sys
from pathlib import Path
folder = Path(sys.argv[1]).resolve()
if not folder.is_dir():
raise SystemExit("対象フォルダがありません")
output = Path("file-list.csv").resolve()
rows = []
for item in sorted(folder.iterdir()):
if item.is_file() and not item.is_symlink() and item.resolve() != output:
rows.append([item.name, item.suffix.lower(), item.stat().st_size])
with output.open("x", encoding="utf-8-sig", newline="") as f:
writer = csv.writer(f)
writer.writerow(["filename", "extension", "bytes"])
# 表計算ソフトがファイル名を数式として扱わないようにする
for name, ext, size in rows:
if name.startswith(("=", "+", "-", "@")):
name = "'" + name
writer.writerow([name, ext, size])
print(f"{len(rows)} 件を {output} に保存しました")
出力CSVは探索対象に含めず、シンボリックリンクも除外しています。CSVを表計算ソフトで開くときの数式解釈を避けるため、特定の記号で始まるファイル名には先頭にアポストロフィを付けます。CSV内の表示名は元の名前と完全一致しない場合がありますが、元ファイル自体は変更しません。
3.よくあるエラーと、AIへの改善依頼
対象フォルダがありません:現在位置とsampleの場所を確認します。別の場所なら引用符で囲んだ絶対パスを指定します。
FileExistsError:file-list.csvが残っています。前回の結果を別名にして保管します。
PermissionError:CSVをExcelで開いていないか、出力先に書き込めるかを確認します。対象によってはファイル情報の読み取り権限も必要です。
このファイル一覧ツールに、拡張子ごとの件数表示を追加してください。 元ファイルを変更しない仕様、上書きを防ぐ仕様は維持してください。 sampleにtxtを2個、pngを1個置いた場合の期待結果を先に説明してください。 追加ライブラリは使わないでください。
サンプルはこのサイトの制作環境で、空フォルダと複数のファイル、既存CSVがある場合の動作を確認しています。すべてのOSや権限設定での動作確認ではありません。
参照した公式資料
製品の仕様や利用条件は変更される場合があります。操作や導入の前に、公式ページも確認してください。記事内の作業例・指示文・サンプルは本サイトが作成しています。