Skip to content

Instantly share code, notes, and snippets.

@carlosperate
Created September 20, 2016 16:34
Show Gist options
  • Save carlosperate/a25021307f330558030e4ac6fb1a2215 to your computer and use it in GitHub Desktop.
Save carlosperate/a25021307f330558030e4ac6fb1a2215 to your computer and use it in GitHub Desktop.
Rename pictures with date and time.
import os
import sys
import glob
#from PIL import Image
#from PIL.ExifTags import TAGS
import time
def get_exif(file_name):
""" Extracts EXIF data. Does not check for file validity. """
ret = {}
i = Image.open(file_name)
info = i._getexif()
for tag, value in info.items():
decoded = TAGS.get(tag, tag)
ret[decoded] = value
return ret
def format_date_time(exif):
date_time = exif["DateTimeOriginal"]
date_time = date_time.replace(":", ".")
date_time = date_time.replace(" ", "-")
return date_time
def process_cwd_images():
files = glob.glob("*.JPG")
for file in files:
print("Renaming '%s' into..." % file)
exif = get_exif(file)
date_time = format_date_time(exif)
if date_time is None:
print("\tFile does not contain valid EXIF data, ignoring.")
continue
number = 0
new_name = date_time + ".jpg"
if new_name == file:
print("\t%s (already ok)" % new_name)
continue
while os.path.exists(new_name):
number += 1
new_name = date_time + "_" + str(number) + ".jpg"
print("\t%s" % new_name)
#os.rename(file, new_name)
def main():
try:
dir_to_process = sys.argv[1]
except IndexError:
print("Python script needs directory as first and only argument!")
sys.exit(1)
if not os.path.isdir("/home/el"):
print("Directory to process does not exist: %s" % dir_to_process)
sys.exit(1)
os.chdir(dir_to_process)
print("Processing images from directory: %s" % os.getcwd())
success = process_cwd_images()
if success:
print("All pictures processed successfully.")
else:
print("There were some errors processing the pictures.")
print("Consult the script output for more infomration.")
return 1
if __name__ == "__main__":
return main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment