Skip to content

Instantly share code, notes, and snippets.

@loxygenK
Created December 5, 2020 16:08
Show Gist options
  • Save loxygenK/bf05723545e1fd77d9534d21b1a6357c to your computer and use it in GitHub Desktop.
Save loxygenK/bf05723545e1fd77d9534d21b1a6357c to your computer and use it in GitHub Desktop.
いつしかにやったファイル名一括変更プログラムのハッカソン
import json
import os
from datetime import datetime
from PIL import Image, UnidentifiedImageError
def main():
if not os.path.isfile("settings.json"):
create_new_setting()
json_data = {}
with open("settings.json", mode="r") as f:
json_data = json.load(f)
while True:
print("give me a path for directory which has images of assignment.")
dir_path = input()
if os.path.isdir(dir_path):
break
print("Seems there is not such directory. Give a try again!")
print("What is the assignment name? (such as number)")
assign_name = input()
asc = yes_or_no("Ascend?")
print("[1] Listing up file's pathes...")
pathes = os.listdir(dir_path)
pathes = [dir_path + "/" + x for x in pathes]
print("[2] Fetching EXIF tags for page number...")
timestamps = {}
for path in pathes:
print(path)
if os.path.isdir(path):
print(" This was directory, skipping.")
continue
exif = get_exif(path)
if exif is None:
print("cannot get exif, skipping!")
continue
if 306 not in exif:
print(" This picture has no timestamp! Using file's modified time instead.")
timestamps[path] = datetime.fromtimestamp(os.path.getmtime(path))
else:
timestamps[path] = datetime.strptime(exif[306], '%Y:%m:%d %H:%M:%S')
print(" " + timestamps[path].strftime("%Y/%m/%d %H:%M:%S"))
print("%d file(s) will be renamed!" % len(timestamps))
print("[3] sorting")
sorted_filename = [k for k, v in sorted(timestamps.items(), key= lambda k: k[1].timestamp(), reverse=not asc)]
print("[4] renaming")
for index, path in enumerate(sorted_filename):
filename = "%s-%s-%s-%s-%s-P.%d.%s" % \
(json_data["grade"], json_data["class"], json_data["number"], json_data["name"],
assign_name, index + 1, path[path.rindex(".") + 1:])
print(path)
print(" ->" + dir_path + filename)
os.rename(path, dir_path + "/" + filename)
print("Work done!")
def create_new_setting():
print("The settings file does not appear exist.")
print("Please create the file before use this file!")
print("")
grade = input_int("What is your grade?: ")
clsnum = input_int("What is your class number?: ")
number = input_int("What is your number?: ")
print("Please input your name:")
name = input()
print("Nice information, I'll save this!")
with open("settings.json", mode="w") as f:
json.dump(
{"grade": grade, "class": clsnum, "number": number, "name": name},
f
)
print("Saved!")
def get_exif(path: str):
try:
with open(path, mode="br") as f:
im = Image.open(f)
return im._getexif()
except UnidentifiedImageError:
return None
def input_int(modal):
print(modal)
while True:
ret = input()
try:
return int(ret)
except Exception:
print("Integer please!")
def yes_or_no(modal):
print(modal + " (Y or other)")
ans = input()
return ans in ["y", "\n"]
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment