Voilà un petit programme écrit en python pour enlever tous les caractères qui font perdre du temps quand on a besoin de restaurer un fichier à partir de la sauvegarde : voyelles accentuées, espaces, caractères de ponctuation, ...
Évidemment il existe déjà des programmes qui font ce travail mais nous avons préféré écrire le nôtre que l'on peut lancer tous les soirs automatiquement avant la sauvegarde.
Ce programme ne fait le ménage que dans les ibays que vous avez spécifiées ou même que dans les seuls répertoires (qu'il suffit d'indiquer) d'une certaine ibay.
Pour l'adapter à votre SME, il vous reste à remplacer "nom_de_l_ibay" par le nom de l'ibay que vous souhaitez voir nettoyée et/ou les répertoires spécifiques d'une ibay. Vous verrez cela à la fin du programme, je crois que c'est évident.
- Code : Tout sélectionner
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import os.path
import re
import sys
import time
import unicodedata
#version du 11 septembre 2014 (!!)
def listdirectory(path): # ne sert à rien, pas appellée dans le programme
fichier=[]
for root, dirs, files in os.walk(path):
for i in files:
fichier.append(os.path.join(root, i))
return fichier
#La fonction os.walk(path) crée un générateur de triplets (root, dirs, files) dans l'arborescence de path.
#Un triplet est généré par répertoire visité.
# root représente le chemin d'accès du répertoire visité.
# dirs est la liste des sous-répertoires du répertoire root
# files est la liste des fichiers du répertoire root.
def supprime_espaces_accents_repertoire(ligne):
#supprime les accents et tirets du texte source
#ligne = unicode(ligne, 'ISO-8859-1').encode('UTF-8') #on décode la châine d'origine accentuée(ISO8859-1), puis on la passe en UTF8
ligne = ligne.replace('é', 'e')
ligne = ligne.replace('è', 'e')
ligne = ligne.replace('ê', 'e')
ligne = ligne.replace('ë', 'e')
ligne = ligne.replace('à', 'a')
ligne = ligne.replace('ã', 'a')
ligne = ligne.replace('â', 'a')
ligne = ligne.replace('î', 'i')
ligne = ligne.replace('ï', 'i')
ligne = ligne.replace('ô', 'o')
ligne = ligne.replace('ö', 'o')
ligne = ligne.replace('ç', 'c')
ligne = ligne.replace('ù', 'u')
ligne = ligne.replace('û', 'u')
ligne = ligne.replace('ü', 'u')
ligne = ligne.replace('\'', '_')
ligne = ligne.replace('$', '_')
ligne = ligne.replace('&', '_')
ligne = ligne.replace('#', '_')
ligne = ligne.replace('?', '_')
ligne = ligne.replace('!', '_')
ligne = ligne.replace('%', '_')
ligne = ligne.replace('(', '_')
ligne = ligne.replace(')', '_')
ligne = ligne.replace('°', '')
ligne = ligne.replace('+¿', 'e')
ligne = ligne.replace('|', '')
ligne = ligne.replace('____', '_')
ligne = ligne.replace('___', '_')
ligne = ligne.replace('__', '_')
ligne = ligne.replace(' ', '_')
ligne = ligne.replace(' - ', '_-_')
ligne = ligne.replace(' -', '_-')
ligne = ligne.replace('- ', '-_')
ligne = ligne.replace('_-', '-')
ligne = ligne.replace('-_', '-')
ligne = ligne.replace('_-_', '-')
ligne = ligne.replace('St-', 'St_')
ligne = ligne.replace('Ste-', 'Ste_')
#ligne = ligne.encode('ISO-8859-1')
#ligne = ligne.encode('utf-8')
return ligne
def renommage_complet_marco(path):
#on travaille en deux temps: d'abord les noms de fichier, puis les noms de répertoire
#renommage ds fichiers: ok pas touche
for root, dirs, files in os.walk(path):
for ancien_nom_fichier in files:
#renommage des fichiers
nouveau_nom_fichier = supprime_espaces_accents_repertoire(ancien_nom_fichier)
if nouveau_nom_fichier != ancien_nom_fichier:
print ""
print "chemin: " + os.path.join(root, "")
print "ancien fichier: " + ancien_nom_fichier
print "nouveau fichier: " + nouveau_nom_fichier
try:
os.rename(os.path.join(root, ancien_nom_fichier) , os.path.join(root, nouveau_nom_fichier))
except Exception,e:
print "erreur renommage fichier - verifier doublon"
#renommage des répertoires"
modif_faite = "oui"
while modif_faite == "oui":
print "BOUCLE WHILE"
modif_faite = "non"
for root, dirs, files in os.walk(path): #mega gros tableau
list_mon_repertoire_split = root.split(os.sep) #os.sep séparateur systeme /\
#print ""
#print list_mon_repertoire_split
for index in range(len(list_mon_repertoire_split)): #passe d'une case à une autre
#print list_mon_repertoire_split[index]
mon_ancien_chemin_rep = os.sep.join(list_mon_repertoire_split) #on concatène avec "os.sep" = "\"
nouveau_element = supprime_espaces_accents_repertoire(list_mon_repertoire_split[index])
if nouveau_element != list_mon_repertoire_split[index]:
list_mon_repertoire_split[index] = nouveau_element
modif = "oui"
#print "MODIF-MODIF:" + list_mon_repertoire_split[index]
mon_nouveau_chemin_rep = os.sep.join(list_mon_repertoire_split) #on concatène avec "os.sep" = "\"
if mon_ancien_chemin_rep != mon_nouveau_chemin_rep:
print ""
print "ancien repertoire: " +mon_ancien_chemin_rep
print "nouveau repertoire: " +mon_nouveau_chemin_rep
try:
os.rename(mon_ancien_chemin_rep, mon_nouveau_chemin_rep)
modif_faite = "oui"
#print "RENOMMAGE OK"
except Exception,e:
print "erreur renommage repertoire - verifier doublon"
if __name__ == "__main__":
# 1 - Lister tous les fichiers et repertoire
# 2 - pour chaque repertoire et pour chaque fichier on essaye de remplacer
#"infos systeme"
print "infos systeme"
print "version de python:"
print sys.version_info
mon_time_depart = time.localtime()
print "----------PROGRAMME DE SUPRESSION DES ACCENTS ET ESPACES------------"
# le chemin entre guillemets est le répertoire à nettoyer.
chemin_archives_1 = "/home/e-smith/files/ibays/nom_de_l_ibay_1/files/nom_du_repertoire_1"
print ""
print ""
print ""
print "-------------------------REPERTOIRE DE TRAVAIL-----------------------------------"
print "Chemin du repertoire: " + chemin_archives_1
print ""
renommage_complet_marco(chemin_archives_1)
chemin_archives_2 = "/home/e-smith/files/ibays/nom_de_l_ibay_1/files/nom_du_repertoire_2"
print ""
print ""
print ""
print "-------------------------REPERTOIRE DE TRAVAIL-----------------------------------"
print "Chemin du repertoire: " + chemin_archives_2
print ""
renommage_complet_marco(chemin_archives_2)
chemin_archives_3 = "/home/e-smith/files/ibays/nom_de_l_ibay_1/files/nom_du_repertoire_3"
print ""
print ""
print ""
print "-------------------------REPERTOIRE DE TRAVAIL--------------------------------------"
print "Chemin du repertoire: " + chemin_archives_3
print ""
renommage_complet_marco(chemin_archives_3)
chemin_archives_4 = "/home/e-smith/files/ibays/nom_de_l_ibay_2/files"
print ""
print ""
print ""
print "-------------------------REPERTOIRE DE TRAVAIL--------------------------------------"
print "Chemin du repertoire: " + chemin_archives_4
print ""
renommage_complet_marco(chemin_archives_4)
print ""
print ""
print "depart du script: %s-%s-%s heure: %s:%s:%s " %
(mon_time_depart[0],mon_time_depart[1],mon_time_depart[2],mon_time_depart[3],mon_time_depart[4],mon_time_depart[5])
mon_time_fin = time.localtime()
print "fin du script: %s-%s-%s heure: %s:%s:%s " %
(mon_time_fin[0],mon_time_fin[1],mon_time_fin[2],mon_time_fin[3],mon_time_fin[4],mon_time_fin[5])
Le nom du fichier n'est pas obligatoirement "nettoyé" en un seul passage (ce qui peut poser problème à certaines structures pour les liens) mais en 2 à 4 passages donc 2 à 4 jours en ce qui nous concerne.
Il vaut mieux aussi que tous les utilisateurs aient fermé leurs fichiers. Donc la nuit, c'est mieux.
Nous sommes à votre écoute pour toute observation.