A simple Python script that scans a given directory and its all subdirectories and organizes the files of specified extensions by their creation dates, year and month, in this example.
大量のファイルを作成年月ごとのフォルダに分けて整理するPythonスクリプトです。
- 整理したい複数の拡張子を指定
- ファイル名を作成日時から自分で決めた形式に変更(オプション)
organize_files.py
from pathlib import Path
from itertools import chain
from datetime import datetime
import shutil
#整理したいディレクトリのパスを与える
datdir = Path("/Users/user_name/your_data_folder/")
#整理したいファイルの拡張子を指定する(いくつでも)
ext_list = ["jpg", "jpeg", "png", "PNG"]
files = []
for ext in ext_list:
#このディレクトリおよびすべてのサブディレクトリを再帰的にスキャンする
_files = datdir.glob('**/*.%s' % ext)
files = chain(files, _files)
for i, f in enumerate(files):
#ファイルの作成日時
bt = datetime.fromtimestamp(f.stat().st_birthtime)
#サブフォルダ名の形式を2021_04などとする
folder_name = "%.4d_%.2d" %(bt.year, bt.month)
#サブフォルダを作る(すでにあればスキップ)
subfolder = datdir / folder_name
try:
subfolder.mkdir()
except FileExistsError:
pass
#ファイル名の指定
#1) そのまま変えない場合
new_file_name = f.name
#2) 作成日時から作る場合
# new_file_name = "%.4d%.2d%.2d_%.2d%.2d_%d.%d%s" %(bt.year, bt.month, bt.day, bt.hour, bt.minute, bt.second, bt.microsecond, f.suffix)
#サブフォルダへの移動
new_path = shutil.move(f, (subfolder / new_file_name))
#ログ出力
print("File %d: %s \n => %s" %(i, f, ("/".join(new_path.parts[-2:]))))
print("Done!")
参考:各ライブラリのドキュメント