Projet

Général

Profil

renommage_fichiers.py

christophe guerinot, 08/03/2016 17:20

Télécharger (2,75 ko)

 
1
#!/usr/bin/python3
2

    
3
# Sodara HANG   v1.0    2016-02-08    Version initiale
4
# Sodara HANG   v1.1    2016-02-09    Verification fichier existant avant de renommer
5

    
6
import os,re,unicodedata,datetime,argparse
7

    
8
def renommage(pattern, root, fichier, isTraitement):
9
    # Si le fichier ou repertoire contient des caracteres non autorises
10
    if re.search(pattern, fichier):
11
        print(str(datetime.datetime.now()) + " Répertoire: " + root.encode('utf-8','replace').decode('utf-8'))
12
        # On remplace les espaces
13
        s = fichier.replace(" ", "_")
14
        # On enleve les accents
15
        s1 = unicodedata.normalize('NFKD', s).encode('ascii','ignore').decode("utf-8")
16
        # S'il reste des caracteres interdits on les remplace par des tirets
17
        if re.search(pattern, s1):
18
            s1 = re.sub(pattern, "-", s1)
19
        # On affiche l'ancien et le nouveau
20
        print(str(datetime.datetime.now()) + " Avant Renommage: " + fichier.encode('utf-8','replace').decode('utf-8'))
21
        # Si ce n'est pas du test, on renomme
22
        if isTraitement:
23
            # Vérifier que le fichier ou repertoire cible n'existe pas déjà
24
            if os.path.exists(os.path.join(root, s1)):
25
                s1 += "-renomme"
26
            os.rename(os.path.join(root, fichier), os.path.join(root, s1))
27
            print(str(datetime.datetime.now()) + " Renommage effectué")
28
        print(str(datetime.datetime.now()) + " Après Renommage: " + s1)
29

    
30
pattern = "[^0-9a-zA-Z._-]"
31

    
32
parser = argparse.ArgumentParser(description='Renomme les répertoires et fichiers contenant des caractères spéciaux ou encodés différemment. Les accents sont supprimés, les espaces remplacés par des underscores, les autres caractères spéciaux par des tirets. Par défaut, le script ne fait qu\'analyser la situation dans le répertoire.\nLe script doit être exécuté plusieurs fois car dans certains cas, les répertoires ne sont pas analysables avant renommage.')
33
parser.add_argument('-t', action='store_true', default=False, dest='traitement', help='Effectue réellement le traitement en renommant les fichiers')
34
parser.add_argument('-p', action='store', default=".", dest='path', help='Chemin racine qui sera analysé pour le renommage récursif')
35
args = parser.parse_args()
36

    
37
print(str(datetime.datetime.now()) + " Analyse du répertoire: " + args.path)
38
if not args.traitement:
39
    print(str(datetime.datetime.now()) + " ANALYSE SEULEMENT, pas de renommage")
40
print(str(datetime.datetime.now()) + " ANALYSE DES *REPERTOIRES*")
41
for root, dirs, files in os.walk(args.path):
42
    for d in dirs:
43
        renommage(pattern, root, d, args.traitement)
44
print(str(datetime.datetime.now()) + " ANALYSE DES *FICHIERS*")
45
for root, dirs, files in os.walk(args.path):
46
    for f in files:
47
        renommage(pattern, root, f, args.traitement)