【Python】ファイル名の日付をアメリカ式から日本式に変換する

機能

ファイル名の日付をアメリカ式から日本式に変換するPythonプログラムです。

  • アメリカ式:DD-MM-YYYY、D-M-YYYY
  • 日本式:YYYY-MM-DD、YYYY-M-D

【実行前】

【実行後】

サンプル動画

youtu.be

プログラム

#! Python3
# 機能
#  ファイル名の日付をアメリカ式から日本式に変換する
# 使い方
#  1.Pythonを実行する
# 実行コマンド
#  python file_name_date_converter.py パス
#  python file_name_date_converter.py input

import os
import re
import sys
import shutil

# アメリカ式日付の正規表現
date_pattern = re.compile(
    r"""
    ^(.*?)
    ((0|1)?\d)-
    ((0|1|2|3)?\d)-
    ((19|20)\d\d)
    (.*?)$
    """,
    re.VERBOSE,
)

# ファイル名を変換する
def convert_file_name(file_name):
    # アメリカ式日付を含むファイル名を検索する
    match_object = date_pattern.search(file_name)
    if match_object == None:
        return None

    # ファイル名を分割する
    before_part = match_object.group(1)
    month = match_object.group(2)
    day = match_object.group(4)
    year = match_object.group(6)
    after_part = match_object.group(8)

    # 日本式日付のファイル名に変換する
    return before_part + year + "-" + month + "-" + day + after_part


if len(sys.argv) != 2:
    sys.exit("python file_name_date_converter.py パス")
path = sys.argv[1]

for file_name in os.listdir(path):
    # ファイル名を変換する
    new_file_name = convert_file_name(file_name)
    if new_file_name == None:
        continue

    # リネームする
    file_path = os.path.join(path, file_name)
    new_file_path = os.path.join(path, new_file_name)
    print('Renaming "{}" to "{}"...'.format(file_path, new_file_path))
    shutil.move(file_path, new_file_path)

プログラムを使ってリネームする際は、リネームする処理をコメントアウトした状態で一度実行した方がよいです。

ログから対象ファイルやリネーム後のファイル名が問題ないかを確認することができます。

#shutil.move(file_path, new_file_path)

使い方

  1. Pythonを実行する

コマンド

実行コマンド

python file_name_date_converter.py パス
python file_name_date_converter.py input

パスは相対パスでも絶対パスでも指定可能です。

実行環境

プログラム実行時の環境は以下になります。

開発環境については以下を参考にして下さい。

stmtk358.hatenablog.com

プログラムのバッチ化については以下を参考にして下さい。

stmtk358.hatenablog.com

exeファイル

Python環境がなくても実行可能なexeファイルもあります。

とりあえず試してみたい方は以下からダウンロードして下さい。

github.com

実行方法

コマンドラインから以下のコマンドを実行して下さい。

file_name_date_converter.exe パス
file_name_date_converter.exe input

GitHub

今回使用したプログラムやテストデータはGitHubにアップロードしています。

github.com

参考文献

www.oreilly.co.jp