1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
import os,re,unicodedata,datetime,argparse
|
7
|
|
8
|
def renommage(pattern, root, fichier, isTraitement):
|
9
|
|
10
|
if re.search(pattern, fichier):
|
11
|
print(str(datetime.datetime.now()) + " Répertoire: " + root.encode('utf-8','replace').decode('utf-8'))
|
12
|
|
13
|
s = fichier.replace(" ", "_")
|
14
|
|
15
|
s1 = unicodedata.normalize('NFKD', s).encode('ascii','ignore').decode("utf-8")
|
16
|
|
17
|
if re.search(pattern, s1):
|
18
|
s1 = re.sub(pattern, "-", s1)
|
19
|
|
20
|
print(str(datetime.datetime.now()) + " Avant Renommage: " + fichier.encode('utf-8','replace').decode('utf-8'))
|
21
|
|
22
|
if isTraitement:
|
23
|
|
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)
|