Dividere File Per Data

Un semplice modo di dividere le immagini che vengono dalla fotocamera, che spesso copio a caso, oppure vengono prese da programmi diversi: talvolta può essere necessario ridividerle per data, e in questo caso Python può dar mano. Lo script è semplice, anche troppo (per esempio, non considera il fatto che potrebbe volere ricopiare un file con lo stesso nome in una directory).

#!/usr/bin/python3
# -*- coding: utf-8 -*-
#
# smista le foto in una cartella dove sono state buttate
# a cialtrone :-)
import os, sys, glob, datetime, shutil
#
def processfile(fn):
    t = os.path.getmtime(fn)
    newpath = str(datetime.datetime.fromtimestamp(t))[:10].replace("-", os.sep)
    newpath = os.path.join(percorso, newpath)
    newfile = os.path.join(newpath, os.path.basename(fn))
    # se non esiste la directory la crea
    if not os.path.exists(newpath):
        os.makedirs(newpath)
    shutil.move(fn, newfile)
#
def lcasedir(sdir):
    lista = glob.glob(os.path.join(sdir, "*.*"))
    if len(lista) > 0:
        for fl in lista:
            fname = os.path.join(sdir, fl)
            ext = os.path.splitext(fname)[1]
            if ext != ext.lower():
                if ext.lower() == ".jpg":
                    try:
                        shutil.move(fname, os.path.splitext(fname)[0] + ".jpg")
                    except:
                        print ("Errore nel rinominare il file")
#
def scandir(sdir):
    lista = glob.glob(os.path.join(sdir, "*.jpg"))
    if len(lista) > 0:
        for fl in lista:
            fname = os.path.join(sdir, fl)
            processfile(fname)
if __name__ == "__main__":
    global percorso
    percorso = "/home/me/immagini"
    lcasedir (percorso)
    scandir (percorso)
    print ("Fatto!")