nettoyages des espaces et des accents (et autres caracteres)

Forum dédié à la distribution du même nom et que vous pourrez télécharger sur http://www.contribs.org. La nouvelle version de cette distribution se nomme SME Server. Une description est donnée sur le portail phénIXUS : http://www.ixus.net/sme-server/.

nettoyages des espaces et des accents (et autres caracteres)

Message par gières » 01 Oct 2014 16:43

Bonjour,

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.
gières
 
Message(s) : 35
Inscription : 02 Nov 2011 21:53
Localisation : Gières (près de Grenoble)

Retour vers SME

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité

cron