GUI版ドラマ・アニメ用タグ付けpythonスクリプト

plexmediaserverのためのドラマ・アニメ用タグ付けをするpythonスクリプトのGUI版です。
ChatGPTに相談したら、tkinterというライブラリを紹介してくれました。

Windows11とUbuntu22.04で動作確認をしました。

 

使い方

スクリプトの準備

ダウンロードして、適当なフォルダに展開してください。

Windowsならば、PowerShellを
Ubuntuならば、端末を

開いてください。

展開したフォルダに、以下の3つのフォルダと2つのスクリプトを確認してください。

  • test_files_1
  • test_files_2
  • test_files_original
  • rename_animedrama.py
  • rename_animedrama_g.py

GUI版スクリプトは、rename_animedrama_g.pyです。

test_filesの3つのフォルダの中身は、同じです。
14種類の名前が付いたファイルが入っています。
test_files_originalは使わず、test_files_1やtest_files_2を使って
タグ付けを試してください。
変換前と変換後を比較するために、test_files_originalを参照してください。

 

スクリプトの実行

以下の通り、実行してください。

c:\>python rename_animedrama_g.py

実行するとwindowが開きます。

「フォルダ選択」をクリックします。

下の「フォルダー」欄で「test_files_1」が表示されていることを確認します。

右下の「フォルダーの選択」ボタンをクリックすると処理が実行されます。

結果は、以下のように表示されます。

ファイル数:フォルダー内にあるファイルの数
変更済み: 名前を変更したファイルの数

結果を確認するために、フォルダーの中身を確認します。

下の3ファイルは、漢数字、既にタグがあったファイルで、それ以外の11ファイルが正常にタグ付けされたことがわかります。
オリジナルを確認してみましょう。

ソースコード rename_animedrama_g.py

# rename_animedrama_g.py
# version 1.0
# 2023/05/17
# by simplelife&ChatGPT
#

import os
import tkinter as tk
from tkinter import filedialog
import re
import argparse

# 正規表現パターンのコンパイル
season_pattern = re.compile(r'(Season|season|season |シーズン)(\d{1,2})')
ep1 = re.compile(r'(#|♯)\d{1,3}')
ep2 = re.compile(r'\(\d{1,3}\)')
ep3 = re.compile(r'第\d{1,3}話')
episode_list = [ep1, ep2, ep3]
se_pattern = re.compile(r'(s|S)(\d{1,2})(e|E)(\d{1,3})')
# 全角から半角に変換するテーブル
zenkaku_table = str.maketrans('1234567890()#', '1234567890()#')

def browse_folder():
    folder_selected = filedialog.askdirectory()
    folder_path.set(folder_selected)
    update_file_count()

def update_file_count():
    folder = folder_path.get()
    file_count = 0
    renamed_count = 0

    for root, dirs, files in os.walk(folder):
        for file in files:
            file_count += 1
            file_path = os.path.join(root, file)
            new_file = rename_file(file)
            if new_file != file:
                renamed_count += 1
                new_file_path = os.path.join(root, new_file)
                os.rename(file_path, new_file_path)

    file_count_label.config(text="ファイル数: {}".format(file_count))
    renamed_count_label.config(text="変更済み: {}".format(renamed_count))
    complete_label.config(text="処理が完了しました")

def rename_file(file_name):
    new_file_name = file_name
    file_name = file_name.translate(zenkaku_table)
    if not re.search(se_pattern, file_name):
        match = re.search(season_pattern, file_name)
        if match:
            season = re.sub(r'\D', "", match.group())
        else:
            season = 1
        for episode_pattern in episode_list:
            match = re.search(episode_pattern, file_name)
            if match:
                episode = re.sub(r'\D', "", match.group())
                new_file_name = re.sub(
                episode_pattern, match.group() + f'_s{season}e{episode}', file_name)
                print(match.group())
    return new_file_name

# Tkinterウィンドウの作成
window = tk.Tk()
window.title("plexmediaアニメドラマタグ付け")
window.geometry("200x200")

# フォルダ選択ボタンの作成
browse_button = tk.Button(window, text="フォルダ選択", command=browse_folder)
browse_button.pack()

# フォルダパス表示用のラベルの作成
folder_path = tk.StringVar()
folder_path_label = tk.Label(window, textvariable=folder_path)
folder_path_label.pack()

# ファイル数表示用のラベルの作成
file_count_label = tk.Label(window, text="ファイル数: 0")
file_count_label.pack()

# 変更済みファイル数表示用のラベルの作成
renamed_count_label = tk.Label(window, text="変更済み: 0")
renamed_count_label.pack()

# 処理完了表示用のラベルの作成
complete_label = tk.Label(window, text="")
complete_label.pack()

# ウィンドウのメインループ
window.mainloop()

まとめ

GUI版は、フォルダの指定が簡単になりました。
ご活用ください。

2023年05月19日 | Posted in 電脳:録画サーバー | タグ: , No Comments » 

関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください