むるおか君のPythonパチンコシミュレーション

Pythonを使ってパチンコの新台解析やってます。たまに自分が処理したい作業のGUIも作ったり

フォルダの中の画像ファイルを別のフォルダへリネームしてコピーするpythonGUIプログラム

#! python3
# rename same folder more than 10.py - あるフォルダ内のファイル名を他のフォルダ内のファイル名にするため、forループを用いてrenameする

import tkinter as tk
from  tkinter  import messagebox
from  tkinter  import filedialog
import os
import glob
import re
import shutil
import pathlib
from PIL import Image
from PIL.ExifTags import TAGS

# 関数の定義 01
def get_exif_of_image(file):
    """Get EXIF of an image if exists.

    指定した画像のEXIFデータを取り出す関数
    @return exif_table Exif データを格納した辞書
    """
    im = Image.open(file)

    # Exif データを取得
    # 存在しなければそのまま終了 空の辞書を返す
    try:
        exif = im._getexif()
    except AttributeError:
        return {}

    # タグIDそのままでは人が読めないのでデコードして
    # テーブルに格納する
    exif_table = {}
    for tag_id, value in exif.items():
        tag = TAGS.get(tag_id, tag_id)
        exif_table[tag] = value

    return exif_table

def get_data_of_image(file):
    exif_table = get_exif_of_image(file)
    return exif_table.get("DateTimeOriginal")


def set_func(): 
    input_box.delete(0, tk.END)
    iDir = os.path.abspath(os.path.dirname(__file__))
    cfolder = filedialog.askdirectory(initialdir=iDir)
    input_box.insert(tk.END,cfolder)

def set2_func(): 
    input2_box.delete(0, tk.END)
    iDir2 = os.path.abspath(os.path.dirname(__file__))
    cfolder2 = filedialog.askdirectory(initialdir=iDir2)
    input2_box.insert(tk.END,cfolder2)

def run_func():
    cfilelist = []
    for f in  glob.glob(input_box.get() + "/**/**.jpg",recursive=True):
        if  os.path.isfile(f):
            cfilelist.append(os.path.abspath(f))
    a = 0
    for k  in cfilelist:
        a  +=  1
        shutil.copy(k,os.path.join(input2_box.get(),get_data_of_image(k) + '{0:03d}'.format(a) + '.jpg'))
    

#GUI設定
root = tk.Tk()
root.title("リネームプログラム")
root.geometry("500x200")
# Runボタン設置
run_button = tk.Button(root, text = "Run",command = run_func)
run_button.place(x = 250, y = 75)
# Setボタン設置
set1_button = tk.Button(root, text = "in フォルダ", command = set_func)
set1_button.place(x = 400, y = 10)
# Set2ボタン設置
set2_button = tk.Button(root, text = "Outフォルダ", command = set2_func)
set2_button.place(x = 400, y = 40)
# テキストボックス配置
input_box = tk.Entry(width = 60)
input_box.place(x = 10, y = 10)
# テキストボックス配置2
input2_box = tk.Entry(width = 60)
input2_box.place(x = 10, y = 40)
# ステータスバー設置
statusbar = tk.Label(root, text = " No Data!!", bd = 1, relief = tk.SUNKEN, anchor = tk.W)
statusbar.pack(side = tk.BOTTOM, fill = tk.X)


# ウインドウ状態の維持
root.mainloop()