今回は、前回作ったファイル名変換プログラムを拡張し、アプリケーション上からファイル名を変更できるプログラムを書いてみました。まだまだ、修正の余地はありますが、とりあえず形にはなったので、今回投稿させていただきます。まず、参考とさせていただいた書籍のURLです。
https://www.amazon.co.jp/Python%E3%81%A7%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8%E3%81%99%E3%82%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80-%E2%80%95%E2%80%95%E3%82%82%E3%81%86%E6%8C%AB%E6%8A%98%E3%81%97%E3%81%AA%E3%81%84%EF%BC%8110%E3%81%AE%E5%A3%81%E3%82%92%E8%B6%8A%E3%81%88%E3%81%A6%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E3%81%AB%E3%81%AA%E3%82%8D%E3%81%86-%E7%9F%B3%E4%B8%8A-%E6%99%8B/dp/4297132923/ref=sr_1_8?crid=1WZKKQJGTISZ&keywords=python+%E6%8A%80%E8%A1%93%E8%A9%95%E8%AB%96%E7%A4%BE&qid=1686603020&sprefix=python%E3%80%80gijutu%2Caps%2C163&sr=8-8
cat-1.png〜cat-10.pngのファイルをアプリケーションを使って変更していきます。まずはアプリケーションに変更したいファイルの拡張子と、変更後のファイル名を入力していきます。
そして、入力が完了したら、実行ボタンを押下するだけの、簡単なアプリケーションです。実行ボタン押下後の結果がこちら!!
ファイル名がcatからdogに変わってます。まだまだ作成途中ですが、業務上でファイル名を一括変更したいときには、こういったアプリを使って時短していきたいと考えております。
それでは、次に、コードを見ていきましょう。
from pathlib import Path
import tkinter as tk
from tkinter import ttk
import os
# カレントディレクトリの取得
dir_path = os.getcwd() + "/"
dir_list = os.listdir(dir_path)
# 関数
def change_func():
kaku = cb.get() ///コンボボックスの値を取得
for i,file in enumerate(dir_list,1):
if file.endswith(kaku):
rename_from = dir_path + file
rename_to = reg_box.get() + str(i) + kaku
path = Path(rename_from)
path.rename(rename_to)
## GUI ##
root = tk.Tk()
root.title("ファイル名変更")
# フレームを
frame = ttk.Frame(root,padding = 5)
fram変更e.grid(padx = 5,pady = 5)
# ラベル1
reg_label1 = tk.Label(frame,text = "変更するファイルの拡張子")
reg_label1.grid(row = 1,column = 2)
# コンボボックス
extensions = [".txt",".png",".py",".docx",".xlsx"]
cb = ttk.Combobox(frame,values =extensions)
cb.grid(row = 1,column =3)
# ラベル2
reg_label = tk.Label(frame,text = "変更後のファイル名")
reg_label.grid(row = 2,column = 2)
# エントリーボックス
reg_box = tk.Entry(frame,width = 50)
reg_box.grid(row = 2,column = 3)
# 実行ボタン
fp_button = tk.Button(frame,text = "実行",command = change_func)
fp_button.grid(row = 3,column = 3)
# ウインドウ状態の維持
root.mainloop()
まだ、作成途中ですので、コメントをうまく入れられてません。。。
処理内容といたしましては、実行ボタンを押下時に、コンボボックスの値(ファイル拡張子)を取得し、enumerate関数を使って値を二つ処理します。そして最後のファイルを判別した時点で、変数rename_fromに変更対象ディレクトリのパスと変更対象ファイル名を。rename_toにエントリーボックスの値(変更後のファイル名)と連番(i)とファイル拡張子を格納します。そしてrename()メソッドでファイル名を変更します。
現状、まだ作成途中で、本当はディレクトリの中に混在した異なる拡張子を正確に判別し、そのファイルごとに連番を振る使用にしたかったのですが、現状うまくいきませんでした。確かに業務上では一つの拡張子を変更できれば事足りるので、問題はないのですが、なにかこうモヤッとしたものが残ります。今の私の力ではこれが精いっぱいです。何かいい知恵があればご教授願います。
エンジニアファーストの会社 株式会社CRE-CO H.M