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 :

renommer des fichiers en utilisant les expression régulière


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    bio-informaticien
    Inscrit en
    Janvier 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : bio-informaticien
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2019
    Messages : 3
    Par défaut renommer des fichiers en utilisant les expression régulière
    Bonjour à tous,

    j'essaye de renommer des fichiers ayant la structure suivante:

    XXXX_(nom d'origine)-suffixe.extension (où X correspond à un chiffre)

    en: (nom modifié)-suffixe.extension à partir de listes de correspondance entre nom d'origine et nom modifié.

    En tulisant os.rename() Pas de problèmes pour ce qui est de rechercher les fichiers correspondants via des expression régulières par contre je n'arrive pas à trouver comment supprimer le préfixe "XXXX_" dans tout les noms de fichiers via une expression régulière (ce qui m'éviterai d'avoir à connaitre le préfixe pour chaque fichier et de les supprimer)

    Voiçi le code (sans doute affreux) que j'ai jusque là:

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    #!/usr/bin/python
    # -*- coding:Utf-8 -*-
    import os
    import re
     
    #Liste recuperant les fichiers a renommer
    Liste=[]
    #Liste contenant les nouveaux noms des fichiers
    ListeNouveauNom=[]
    #Liste contenant les anciens noms des fichiers
    ListeAncienNom=[]
    #fichier source:
     
     
     
    #Créer liste des dossier
    Liste = os.listdir("/media/DATA/ysevellec/script_test/")
     
     
    #ancien noms prend les noms à changer et 
    FichierAncien = open('AncienNom.txt', 'r') #nom du fichier contenant les noms à changer
    for line in FichierAncien:
    	ListeAncienNom.append(line.strip())
     
    FichierNouveau = open('NouveauNom.txt', 'r') #fichier contenant les nouveaux noms
    for line in FichierNouveau:
    	ListeNouveauNom.append(line.strip())
     
    #renommer les fichiers à partir des deux listes
    for i in range(0,len(ListeAncienNom)):
    	rech=re.compile("^(.){4}_"+ListeAncienNom[i]+".txt")
    	for fichier in os.listdir("/media/DATA/ysevellec/script_test/"):
    		if rech.match(fichier):
    			print(ListeAncienNom[i]+" trouvé") #test du module
    			try:
    				os.rename("prefixe"+ListeAncienNom[i]+".txt",ListeNouveauNom[i]+".fastq")
    			except:
    				print ListeAncienNom[i]+" n'a pas été renommé"
    comment puis modifier la boucle de changement de nom pour lui permettre de recherche l'expression régulière "^(.){4}_" au lieu de "prefixe"?

    merci d'avance pour vos conseils.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    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 699
    Par défaut
    Citation Envoyé par yanndu92 Voir le message
    trouver comment supprimer le préfixe "XXXX_" dans tout les noms de fichiers via une expression régulière (ce qui m'éviterai d'avoir à connaitre le préfixe pour chaque fichier et de les supprimer)
    Pas besoin de sortir l'artillerie lourde pour supprimer les 5 premiers caractères d'une chaîne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> s = "XXXX_(nom d'origine)-suffixe.extension"
    >>> s[5:]
    "(nom d'origine)-suffixe.extension"
    >>>
    De même pour séparer XXXX_(nom d'origine)-suffixe.extension en XXXX, (nom d'origine), suffixe.extension, .find(...) est assez bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> a = s.find('_')
    >>> b = s.find('-')
    >>> s[:a],s[a:b]
    ('XXXX', "_(nom d'origine)")
    >>> s[:a],s[a:b],s[b:]
    ('XXXX', "_(nom d'origine)", '-suffixe.extension')
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Candidat au Club
    Homme Profil pro
    bio-informaticien
    Inscrit en
    Janvier 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : bio-informaticien
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2019
    Messages : 3
    Par défaut
    Merci beaucoup pour la réponse rapide je n'y avait pas pensé.
    j'ai trouvé une autre solution toute bête de mon coté:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    import os
    import re
     
    #Liste récuperant les fichiers a renommer
    Liste=[]
    #Liste contenant les nouveaux noms des fichiers
    ListeNouveauNom=[]
    #Liste contenant les anciens noms des fichiers
    ListeAncienNom=[]
     
    #Créer liste des dossier
    Liste = os.listdir("/media/DATA/ysevellec/script_test/")
     
    #ancien noms prend les noms à changer et 
    FichierAncien = open('AncienNom.txt', 'r') #nom du fichier contenant les noms à changer
    for line in FichierAncien:
    	ListeAncienNom.append(line.strip())
     
    FichierNouveau = open('NouveauNom.txt', 'r') #fichier contenant les nouveaux noms
    for line in FichierNouveau:
    	ListeNouveauNom.append(line.strip())
     
    #renommer les fichiers à partir des deux listes
    for i in range(0,len(ListeAncienNom)):
    	rech=re.compile("^(.){4}_"+ListeAncienNom[i]+".txt")
    	for fichier in os.listdir("/media/DATA/ysevellec/script_test/"):
    		if rech.match(fichier):
    			print(fichier+" trouvé") #test du module
    			try:
    				patt=re.compile("0000_")
    				os.rename(fichier,ListeNouveauNom[i]+".fastq")
    			except:
    				print ListeAncienNom[i]+" n'a pas été renommé"

  4. #4
    Membre expérimenté Avatar de zancrows
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2016
    Messages : 159
    Par défaut
    Bonjour,

    une solution avec que des regex pour te donner une idée si cela t'intéresses toujours

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    # coding: utf-8
    # python 3.7.0 x86_64
     
    import re
    import os
     
    """
        Exemple avec deux fichiers dans le dossier courant du script.
        entré:
            1234_fichier1-suffix.txt,
            1234_fichier2-suffix.txt
        sortie:
            unNom1-suffix.txt,
            unNom2-suffix.txt
    """
     
    def main():
        reg = re.compile("^[\d]{4}_[\d\w]*-[\d\w]*\.[\w]*")
        new_name_file = ["unNom1", "unNom2"]
        file_list = [_ for _ in os.listdir() if reg.fullmatch(_)]
     
        for i, f in enumerate(file_list):
            new_name = re.sub("^[\d]{4}_[\d\w]*", new_name_file[i], f)
            os.rename(f, new_name)
     
    if __name__ == "__main__":
        main()

  5. #5
    Candidat au Club
    Homme Profil pro
    bio-informaticien
    Inscrit en
    Janvier 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : bio-informaticien
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2019
    Messages : 3
    Par défaut
    Très intéressant effectivement... je m'en vais faire quelques tests sur cette base...

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 049
    Par défaut
    Avec les regex et la méthode split

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> s = "XXXX_(nom d'origine)-suffixe.extension"
    >>> regex = re.compile('\w+_')
    >>> regex.split(s)
    ['', "(nom d'origine)-suffixe.extension"]

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/07/2011, 10h40
  2. Update en utilisant les expressions régulières ?
    Par Christophe Charron dans le forum Requêtes
    Réponses: 4
    Dernier message: 16/12/2008, 16h39
  3. Réponses: 4
    Dernier message: 22/11/2008, 08h28
  4. Renommer des fichiers en supprimant les doublons
    Par Serge63 dans le forum VBScript
    Réponses: 5
    Dernier message: 07/03/2008, 10h36
  5. Réponses: 6
    Dernier message: 14/12/2007, 23h26

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