IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Remplacer les accents dans plusieurs noms de fichiers [Python 2.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 13
    Par défaut Remplacer les accents dans plusieurs noms de fichiers
    Bonjour,

    Je suis débutante en python.
    Je dois remplacer les accents par des lettres non accentués dans le nom de plusieurs fichiers d'un dossier.
    Pour cela j'ai cherché la réponse sur plusieurs forum, j'en ai trouvé une qui me semblait bonne et je l'ai adapté à mon cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    import os, re
    wksp = r"C:\stagiaire\Photos" # chemin des photos
     
    def supprime_accent(wksp):
            """ supprime les accents du texte source """
            accents = { 'a': ['à', 'ã', 'á', 'â'],
                        'e': ['é', 'è', 'ê', 'ë'],
                        'i': ['î', 'ï'],
                        'u': ['ù', 'ü', 'û'],
                        'o': ['ô', 'ö'] }
     
            for (char, accented_chars) in accents.iteritems(): # Recuperation des données de accents
                for dirname, subdirs, files in os.walk(wksp):   # Boucle sur chaque fichier du dossier wksp et ses sous-dossiers
                    for nom in files:                           # Recupération de tous les noms de fichiers
                        for accented_char in accented_chars:            # Pour chaque accent
                            nomch = nom.replace(accented_char, char)    # Remplacement dans le nom des accents par les lettres correspondantes
            return nomch
    supprime_accent(wksp)
    print "script ok"
    Or cela ne fonctionne pas aucun de mes noms de fichier est modifié et il n'y a pourtant aucun message d'erreur. Pour trouver le problème j'ai effectué des print à toutes les étapes. Par cette méthode j'arrive à récupérer les noms de mes fichiers, les caractères accentués, les équivalents non accentués. Mais quand je fait print nomch je n'obtiens qu'un nom de fichier.
    Je suis bloquée pourriez-vous m'aider s'il-vous-plaît.

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 762
    Par défaut
    Salut,

    Pour renommer les fichiers, vous disposez de la fonction rename dans le module os.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    J'ajouterai aussi le module unicodedata

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >>> import unicodedata
    >>> f = u'séjour_à_Dembélé.jpg'
    >>> unicodedata.normalize('NFKD', f).encode('ascii', 'ignore')
    'sejour_a_Dembele.jpg'
    >>>

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 13
    Par défaut
    Bonjour,

    J'ai essayé d'utiliser la méthode de l'unicode, parce que je ne vois pas comment utiliser le module rename pour renommer 4000 fichiers de noms variés pour ne changer que les accents.
    Voici le script que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import os
    import unicodedata
     
     
    wksp = r"C:\stagiaire\Aude\Photos" # chemin des photos
    def suppr_accent(wksp):
        for dirname, subdirs, files in os.walk(wksp):   # Boucle sur chaque fichier du dossier wksp et ses sous-dossiers
            for nom in files:                           # Recupération de tous les noms de fichiers
                noms = unicode(nom, "utf8", "replace")
                name = unicodedata.normalize('NFD', noms)
        return name.encode('ascii', 'ignore')
     
    suppr_accent(wksp)
    print "script ok"
    Comme pour le précédent script il me marque bien script OK mais lorsque je vais sur mon dossier photo les fichiers possédant des accents dans leur nom ont toujours les accents.
    Je ne comprend pas où est le problème dans mon script.

    Merci pour votre aide.

  5. #5
    Membre émérite
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Par défaut
    Citation Envoyé par lyko94 Voir le message
    Bonjour,

    J'ai essayé d'utiliser la méthode de l'unicode, parce que je ne vois pas comment utiliser le module rename pour renommer 4000 fichiers de noms variés pour ne changer que les accents.
    Voici le script que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import os
    import unicodedata
     
     
    wksp = r"C:\stagiaire\Aude\Photos" # chemin des photos
    def suppr_accent(wksp):
        for dirname, subdirs, files in os.walk(wksp):   # Boucle sur chaque fichier du dossier wksp et ses sous-dossiers
            for nom in files:                           # Recupération de tous les noms de fichiers
                noms = unicode(nom, "utf8", "replace")
                name = unicodedata.normalize('NFD', noms)
        return name.encode('ascii', 'ignore')
     
    suppr_accent(wksp)
    print "script ok"
    Comme pour le précédent script il me marque bien script OK mais lorsque je vais sur mon dossier photo les fichiers possédant des accents dans leur nom ont toujours les accents.
    Je ne comprend pas où est le problème dans mon script.

    Merci pour votre aide.

    Bonjour,
    Jusqu'à maintenant, le script récupère le nom des fichiers dans une variable et modifie cette variable.
    => le nom des fichiers sur le disque n'a pas été modifié.
    => utilisation de rename dont le rôle est justement de modifier le nom des fichiers sur le disque…

    Clodion
    PS: Wiztricks s'est donné la peine d'indiquer "LE" lien vers "LA" méthode (non, ce n'est pas un module) considérée. Ce n'est pas pour rien, non?

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Ah ben oui, évidemment.

    Je n'avais pas fait attention à ton premier code.

    Regarde mes commentaires:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        for dirname, subdirs, files in os.walk(wksp):
            for nom in files:                           
                noms = unicode(nom, "utf8", "replace")           # noms est le nom original du fichier
                name = unicodedata.normalize('NFD', noms)       # name est le même nom en ascii
    
                #  .. et puis ? plus rien ?   manque pas quequ'chose ici ?
    
        return name.encode('ascii', 'ignore')        # on retourne le dernier name

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 10/03/2010, 15h51
  2. Enlever tous les accents dans le nom d'un fichier
    Par Abou Zar dans le forum Langage
    Réponses: 1
    Dernier message: 13/02/2010, 06h58
  3. comment enlever les accents dans un nom de fichiers ?
    Par clavier12AZQSWX dans le forum Administration système
    Réponses: 6
    Dernier message: 23/09/2009, 06h47
  4. Remplacer les accents dans une chaîne
    Par mathieumg dans le forum C
    Réponses: 9
    Dernier message: 23/07/2006, 15h39
  5. Réponses: 17
    Dernier message: 12/04/2005, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo