📂

Pythonで作る!ファイル名に作成日を自動追加するツール📂

2024/12/30に公開

はじめに

「あれ?このファイル、いつ作ったんだっけ...」
「写真やドキュメントが溜まりすぎて、整理が追いつかない...」

こんな経験はありませんか?特に仕事や趣味で大量のファイルを扱っていると、作成日順での管理が重要になってきます。でも、ファイル名を一つ一つ手動で変更するのは大変ですよね。

そこで今回は、Pythonを使ってファイル名の先頭に作成日を自動で追加するシンプルなツールを作ってみましょう。
プログラミング初心者の方でも理解しやすいように、一つ一つ丁寧に解説していきます。

このツールで何ができるの?

たとえば、以下のようなファイルがあったとします。

report.docx
meeting_notes.txt
screenshot.png

このツールを使うと、自動的に以下のように変換されます。

24-03-30_report.docx
24-03-30_meeting_notes.txt
24-03-30_screenshot.png

つまり、このツールには以下の便利な機能があります。

  1. 指定したフォルダ内のすべてのファイルを一括処理
  2. ファイルの作成日を自動で取得して、分かりやすい形式(YY-MM-DD_)に変換
  3. その日付をファイル名の先頭に追加
  4. すでに日付が付いているファイルはスキップ

必要な準備

このツールを作るために必要なのは、Pythonの標準ライブラリだけです。
つまり、追加でライブラリをインストールする必要はありません!

使用するライブラリは以下の3つです:

import os             # ファイルやフォルダを操作するための機能
import datetime       # 日付を扱うための機能
import time          # タイムスタンプ(コンピュータが扱う時刻形式)を処理する機能

コードの解説

それでは、実際のコードを見ていきましょう。まずは全体像を示し、その後で部分ごとに詳しく解説します。

import os
import datetime
import time

def add_creation_date_to_filename(directory):
    for filename in os.listdir(directory):
        file_path = os.path.join(directory, filename)
        
        # ファイルの作成時刻を取得
        creation_time = os.path.getctime(file_path)
        creation_date = datetime.datetime.fromtimestamp(creation_time)
        
        # YY-MM-DD_形式の日付文字列を作成
        date_prefix = creation_date.strftime("%y-%m-%d_")
        
        # 新しいファイル名を作成
        new_filename = date_prefix + filename
        new_file_path = os.path.join(directory, new_filename)
        
        # ファイル名が既に日付で始まっていない場合のみリネーム
        if not filename.startswith(date_prefix):
            os.rename(file_path, new_file_path)
            print(f"Renamed: {filename} -> {new_filename}")
        else:
            print(f"Skipped: {filename} (already has date prefix)")

# スクリプトを実行するディレクトリを指定
directory = "c:/your/directory"
add_creation_date_to_filename(directory)

1. フォルダ内のファイルを取得する

for filename in os.listdir(directory):
    file_path = os.path.join(directory, filename)

このコードは、指定されたフォルダ内のファイルを1つずつ取り出して処理します。os.path.join()を使うことで、WindowsでもMacでも正しく動作するようになります。

2. ファイルの作成日を取得する

creation_time = os.path.getctime(file_path)
creation_date = datetime.datetime.fromtimestamp(creation_time)

ここでは2つのステップを踏んでいます。

  1. まず、コンピュータが理解できる形式(タイムスタンプ)でファイルの作成日を取得
  2. 次に、そのタイムスタンプを人間が読める形式に変換

3. 日付を分かりやすい形式に変換する

date_prefix = creation_date.strftime("%y-%m-%d_")

この1行で、日付を「YY-MM-DD_」という形式に変換します。例えば:

  • 2024年3月30日 → 24-03-30_

日付のフォーマットの意味は以下の通りです:

  • %y: 年を2桁で表示(24)
  • %m: 月を2桁で表示(03)
  • %d: 日を2桁で表示(30)
  • _: アンダースコアを追加

4. ファイル名を変更する

new_filename = date_prefix + filename
new_file_path = os.path.join(directory, new_filename)

if not filename.startswith(date_prefix):
    os.rename(file_path, new_file_path)
    print(f"変更完了: {filename}{new_filename}")
else:
    print(f"スキップ: {filename} (すでに日付あり)")

この部分では。

  1. 新しいファイル名を作成(日付 + 元のファイル名)
  2. すでに日付が付いているファイルはスキップ
  3. それ以外のファイルは名前を変更
  4. 処理結果を画面に表示

使い方

このツールの使い方はとても簡単です。

# 処理したいフォルダのパスを指定
directory = r"C:\作業フォルダ\整理したいフォルダ"
add_creation_date_to_filename(directory)

実行すると、以下のような結果が表示されます。

変更完了: レポート.docx → 24-03-30_レポート.docx
変更完了: 議事録.txt → 24-03-30_議事録.txt
スキップ: 24-03-29_過去の資料.pdf (すでに日付あり)

カスタマイズのヒント

このツールは、必要に応じて簡単にカスタマイズできます。以下にいくつかの例を示します。

1. 違う日付形式を使いたい場合

# 例1: YYYY-MM-DD形式(2024-03-30_)
date_prefix = creation_date.strftime("%Y-%m-%d_")

# 例2: YYYYMMDD形式(20240330_)
date_prefix = creation_date.strftime("%Y%m%d_")

2. サブフォルダも含めて処理したい場合

def add_creation_date_recursive(directory):
    for root, dirs, files in os.walk(directory):
        for filename in files:
            file_path = os.path.join(root, filename)
            # (以下、通常の処理)

注意点

  1. OSによる違い

    • Windowsでは問題なく作成日を取得できます。
    • MacやLinuxでは、少し異なる日付が取得される可能性があります。
  2. ファイル名の重複

    • 同じ日に作成された同名ファイルがある場合は注意が必要です。
    • より厳密な管理が必要な場合は、時刻も含めるなどの工夫が必要です。

おまけ

そんな場面はあまり無いと思いますが、ファイル名に作成日を追加した後に、やっぱり戻したいとなった場合は、以下のコードで今回と逆の処理ができます。

import os
import re

# フォルダのパスを指定
folder_path = r"C:/your/directory"

# フォルダ内の全てのファイルを取得
for filename in os.listdir(folder_path):
    # ファイルのフルパスを作成
    filepath = os.path.join(folder_path, filename)
    
    # ファイルかどうか確認(ディレクトリを除外)
    if os.path.isfile(filepath):
        # 正規表現パターンを定義
        pattern = r'^(\d{2}-\d{2}-\d{2}_)'
        # パターンにマッチするか確認
        if re.match(pattern, filename):
            # 新しいファイル名を作成
            new_filename = re.sub(pattern, '', filename)
            new_filepath = os.path.join(folder_path, new_filename)
            # ファイル名を変更
            os.rename(filepath, new_filepath)
            print(f"リネームしました: {filename} -> {new_filename}")
        else:
            print(f"形式が合わないためスキップしました: {filename}")

まとめ

このツールを使えば、以下のような場面で作業効率が大幅にアップします。

  • 仕事の書類整理
  • 写真やスクリーンショットの管理
  • プロジェクトファイルの整理

プログラミング初心者の方でも、このツールを理解して使いこなせるようになれば、ファイル管理の悩みから解放されるはずです!

Discussion