suppression des accents et des espaces dans les noms

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/.

suppression des accents et des espaces dans les noms

Message par gières » 19 Sep 2012 21:00

de fichiers (la fenêtre "sujet" est trop petite !)

Bonsoir,

Utilisant Affa, nous avons constaté la difficulté à restaurer un fichier dont le nom comporte des caractères accentués, des espaces, ...

Pour cela, nous avons mis en place un programme en python qui s'exécute avant la sauvegarde, qui n'a certainement rien d'innovant mais que nous proposons car il est "prêt à utiliser" sur SME.

Ce programme fonctionne bien depuis quelques semaines et envoie à chaque exécution un compte-rendu dans le compte admin.

Je suis à l'écoute de vos remarques.

Bonne lecture.


N.B. : vous pouvez adapter le programme si, par exemple, vous n'êtes pas d'accord pour renommer "St-Bel" en "St_Bel".


Mode d'emploi :
- aller à la fin du programme ;
- remplacer dans les blocs de traitement "nom_de_l_ibay" par le nom de l'ibay sur laquelle vous voulez que le programme travaille ;
- si vous avez des ibays bien remplies et un processeur déjà bien occupé, vous pouvez y aller progressivement en choisissant certains dossiers dans l'ibay et pas toute l'ibay ;
- attention : les sauvegardes vont considérablement augmenter de taille si les noms des répertoires changent tous suite à cette procédure de renommage !




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 27 août 2012

def listdirectory(path): # ne sert à rien, pas appelé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 chaîne 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('___', '_')
   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))
               break
               
            except Exception,e:
               print "erreur renommage fichier - verifier doublon"
               break
      
            
            
            
   
   #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"
                     break
                     
                  except Exception,e:
                     print "erreur renommage repertoire - verifier doublon"
                     break
                  

      
if __name__ == "__main__":
   # 1 - Lister tous les fichiers et répertoires
   # 2 - pour chaque répertoire 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 SUPPRESSION 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/files/XXXX"
   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/files/YYYY"
   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/files/ZZZZZ"
   print ""
   print ""
   print ""
   print "-------------------------REPERTOIRE DE TRAVAIL--------------------------------------"
   print "Chemin du repertoire: " + chemin_archives_3
   print ""
   renommage_complet_marco(chemin_archives_3)
   
   
   
   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])
   
   
   
   
   
   



   



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