#!python3 # https://github.com/hMatoba/Piexif # http://ce3wiki.theturninggate.net/doku.php?id=file_name_convention # destination: // /ab---.jpg from pathlib import Path import datetime as dt import piexif from collections import defaultdict import re SRC = r'E:\MediaArchive\Andreas\RawByDate\2004' # camera = "Minolta" author = 'ab' dry_run = False # def constant_factory(value): # return lambda: value # fileidx = defaultdict(constant_factory(0)) fileidx = defaultdict(int) for daydir in Path(SRC).iterdir(): mo = re.match(r"(?P
\S*)\s(?P.*)", daydir.name) md = mo.groupdict() title = md['title'] for raw in daydir.rglob(f"*.jpg"): # check whether exif works try: exif_dict = piexif.load(str(raw)) model = exif_dict["0th"][piexif.ImageIFD.Model].decode("ascii") idto = exif_dict["Exif"][piexif.ExifIFD.DateTimeOriginal].decode("ascii") rawdt = dt.datetime.strptime(idto, "%Y:%m:%d %H:%M:%S") except: model = None print(f'exif failed {raw.name}, using file date') mtime = raw.stat().st_mtime rawdt = dt.datetime.fromtimestamp(mtime) # digitized negative photo? if model == 'Canon EOS 5D': rawdt = dt.datetime.strptime(md['dt'], "%Y%m%d") use_ts = False else: use_ts = True if model == 'FinePix S602 ZOOM': author = "nn" else: author = "ab" year = rawdt.year day = f"{rawdt:%Y%m%d}" ts = f"{rawdt:%H%M%S}" if use_ts: destfn = raw.parent / f"{author}-{day}-{title}-{ts}{raw.suffix}" else: index = fileidx[day] + 1 fileidx[day] = index destfn = raw.parent / \ f"{author}-{day}-{title}-{index:04}{raw.suffix}" # destfn = raw.parent / f"{author}-{day}-{title}-{index:04}-{camera}{raw.suffix}" print(raw.name, "->", destfn.name) if not dry_run: if not destfn.exists(): raw.rename(destfn) else: print(f"skipped {raw.name}, {destfn.name}, already exists") camera = "Sony TRV_25E" for raw in daydir.rglob(f"*.avi"): mtime = raw.stat().st_mtime rawdt = dt.datetime.fromtimestamp(mtime) year = rawdt.year day = f"{rawdt:%Y%m%d}" ts = f"{rawdt:%H%M%S}" index = fileidx[day] + 1 fileidx[day] = index destfn = raw.parent / \ f"{author}-{day}-{title}-{ts}-{camera}{raw.suffix}" print(raw.name, "->", destfn.name) if not dry_run: if not destfn.exists(): raw.rename(destfn) else: print(f"skipped {raw.name}, {destfn.name}, already exists")