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 avec python


Sujet :

Python

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut renommer des fichiers avec python
    bonjour,

    J'ai du mal a renommer une liste de fichiers dans un repertoire en ajoutant un prefixe au nom d'origine:

    exemple:

    fichiers sources:
    aaa_bbb.csv
    xxx_zzz_www_vvv.csv

    fichiers resultats:
    prefixe.aaa_bbb.csv
    prefixe.xxx_zzz_www_vvv.csv

    j'ai deja essayé en modifiant des scripts sur le net ça fonctionne pas

    merci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 184
    Points
    184
    Par défaut
    Salut !

    Ca manque un peu d'infos. Tu essaies comment ? Quel message d'erreur (si tu en as 1) s'affiche ? etc.

  3. #3
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    La méthode pour renommer fonctionne bien, je viens de le vérifier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    os.rename('test.txt','prefixe_test.txt')
    Pour le reste, il faut nous en dire plus.

    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  4. #4
    Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci pour votre aide, le probleme au fait c'est pas d'utiliser os.rename ça marche parfaitement, mais c'est que j'ignore les noms des fichiers avec extension.csv , c'est un ensemble de fichiers qui se trouve sous un repertoir, j'aimerai pouvoir donner le chemin vers le repertoire, le script doit pouvoir parcourir tt les fichiers.csv de celui ci et les renommer

    exemple : fichier d'origine mmm.csv

    resultat prefixe.mmm.csv

    comment extraire les noms de ces fichiers pour les renommer ?

    voila le script que j'ai utilisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for files in os.walk(path_to_entities_under_suite):
        for filename in files:
           oldname= '%s.csv'%filename
           print oldname
           newname='prefixe.%s.csv'%filename
           print newname
           #os.rename(filename,newname)
    en desactivant os.rename et en utilisant print voila ce que j'obtient:
    /////////////////////
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [].csv
    prefixe.[].csv
     
    ['agg_index.csv','prod_businessunit.csv'].csv
    prefixe.['agg_index.csv','prod_businessunit.csv'].csv
    cela semble correct vu qu'il a trouvé les fichiers
    ////////////////////////:
    qd j'active os.rename, voila ce qui se passe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "./main_v2.py", line 100, in (module)
         os.rename(filename,newname)
    WindowsError: [Error 123] The filename, directory name, or volume label syntax is incorrect
    Merci

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 184
    Points
    184
    Par défaut
    Citation Envoyé par zekruss Voir le message
    comment extraire les noms de ces fichiers pour les renommer ?
    Le module os.path est ton ami, dans ce cas là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    >>> import os.path
    >>> os.path.basename('/chemin/quelconque/mmm.csv')
    'mmm.csv'
    >>> os.path.dirname('/chemin/quelconque/mmm.csv')
    '/chemin/quelconque'
    >>> os.path.split('/chemin/quelconque/mmm.csv')
    ('/chemin/quelconque', 'mmm.csv')
    >>> os.path.join('/chemin/quelconque', 'prefixe.mmm.csv')
    '/chemin/quelconque/prefixe.mmm.csv'
    Là, je crois qu'il y a tout pour que tu arrives à tes fins (et bien + encore dans ce module) !

    Et pour lister le contenu d'un fichier ? Hmmm, le module os a ce qu'il faut, mais je te laisse chercher un peu dans la doc.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Points : 224
    Points
    224
    Par défaut
    Salut,
    Voici un moyen de récupérer les noms de tous les fichiers *.csv dans le répertoire "folder" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listfiles = [f for f in os.listdir(folder) if (os.path.isfile(os.path.join(folder, f)) and os.path.splitext(f)[1] == '.csv')]
    edit : posté un peu tard, nardo47 est passé avant

  7. #7
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Voilà un petit programme qui fait tout et que tu pourras adapter facilement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    import os
    import fnmatch
     
    rep = r"C:\Python26"
    selection = "*.csv"
    noms = os.listdir(rep)
    for nom in noms:
        nfc = os.path.join(rep, nom)
        if os.path.isfile(nfc) and fnmatch.fnmatch(nom, selection):
            os.rename(nfc, os.path.join(rep, "prefixe_" + nom))
    Le module fnmatch permet de vérifier si un nom de fichier correspond à la sélection (chaine avec joker).
    Tu pourrais d'ailleurs avoir une liste de sélections, et il faudrait alors vérifier que le nom testé vérifie au moins l'une d'entre elles.

    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  8. #8
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    Citation Envoyé par valAa Voir le message
    Salut,
    Voici un moyen de récupérer les noms de tous les fichiers *.csv dans le répertoire "folder" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listfiles = [f for f in os.listdir(folder) if (os.path.isfile(os.path.join(folder, f)) and os.path.splitext(f)[1] == '.csv')]
    edit : posté un peu tard, nardo47 est passé avant
    ou plus simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import glob, os
    listfiles = glob.glob(folder+os.sep+"*.csv")

  9. #9
    Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci bcp pour votre aide, ça marche comme pas possible !!!!! lol , mission accomplie

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Points : 224
    Points
    224
    Par défaut
    @kango : ah je connaissais pas glob. Merci bien !

Discussions similaires

  1. renommer des fichiers avec nom du répertoire
    Par mitch123 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 26/05/2013, 20h35
  2. renommer des fichiers avec 4 décimales sous dos
    Par gundorf dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 17/06/2012, 11h33
  3. [ZF 1.11] comment renommer des fichier avec setmultiFile(4)
    Par keokaz dans le forum Zend Framework
    Réponses: 8
    Dernier message: 06/08/2011, 09h57
  4. Réponses: 9
    Dernier message: 04/02/2010, 17h36
  5. [] [Réseau] Renommer des fichiers dans un site FTP
    Par JerBi dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 22/08/2003, 01h35

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