4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ファイルを作成年月ごとにフォルダ分けするPythonスクリプト

Last updated at Posted at 2021-04-04

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!")

参考:各ライブラリのドキュメント

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?