見出し画像

Python、「指定した形式のフォルダのみツールをかける」試してみた。

import os
import datetime
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
import re

# 変更済みのファイル名を記録するためのセット
renamed_files = set()

def is_valid_folder_name(folder_name):
    # フォルダ名の正規表現パターン
    pattern = r'^ALL_\d{8}_コピー$'  # 8桁の数字(日付)にマッチ
    return re.match(pattern, folder_name) is not None

def rename_files(root_path):
    for file_name in os.listdir(root_path):
        file_path = os.path.join(root_path, file_name)
        if os.path.isfile(file_path):
            if file_name in renamed_files:
                print(f'処理済です。{file_path} を再確認して下さい。')
                continue

            update_time = os.path.getmtime(file_path)
            update_time_str = datetime.datetime.fromtimestamp(update_time).strftime('%Y%m%d%H%M')
            # ファイル名の末尾に更新日時が含まれている場合は処理を中止する
            if file_name.endswith(f'_{update_time_str}{os.path.splitext(file_name)[1]}'):
                print(f'ファイル名の末尾に更新日時が含まれています。{file_path} をスキップします。')
                continue

            new_file_name = f'{os.path.splitext(file_name)[0]}_{update_time_str}{os.path.splitext(file_name)[1]}'
            new_file_path = os.path.join(os.path.dirname(file_path), new_file_name)
            if os.path.exists(new_file_path):
                print(f'エラー: {new_file_path} はすでに存在します。')
                continue

            os.rename(file_path, new_file_path)
            renamed_files.add(file_name)
            print(f'{file_path}{new_file_name} に変更しました')

def select_folder():
    root = tk.Tk()
    root.withdraw()  # メインウィンドウを非表示にする
    folder_path = filedialog.askdirectory(title='フォルダを選択してください')
    if folder_path:
        folder_name = os.path.basename(folder_path)
        if not is_valid_folder_name(folder_name):
            messagebox.showerror('エラー', 'フォルダ名が正しくありません。処理を中止します。')
            return

        rename_files(folder_path)
        if renamed_files:
            messagebox.showinfo('処理完了', 'ファイル名の変更が完了しました。')
        else:
            messagebox.showinfo('処理完了', '変更するファイルが見つかりませんでした。')
    else:
        messagebox.showinfo('キャンセル', '処理がキャンセルされました。')

if __name__ == "__main__":
    select_folder()


このコードは、is_valid_folder_name関数がフォルダ名の形式をチェックするポイントです。この関数は、与えられたフォルダ名が指定された形式に一致するかどうかを確認します。

この記事が気に入ったらサポートをしてみませんか?