#! 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()