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 noms de fichier à partir d'une liste [PYTHON 3.7.7]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2016
    Messages : 67
    Par défaut renommer noms de fichier à partir d'une liste [PYTHON 3.7.7]
    Bonjour
    mon objectif est changer les noms de fichiers à partir d'une liste de mots à supprimer.
    sauf que python me renvoie que les "chemins" des fichiers sont introuvables. FileNotFoundError: [WinError 2]
    pouvez vous me donner un coup de pouce?
    voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import glob,os
    x= ["xao ","you", "ren", "herv", "min"]
    files=[file  for file in glob.iglob('**/*',recursive= True )]
    #print (files)
    i = 0
    for f in files:
           for j in x:
                  mi=os.rename(f, f.replace(j, " "))
                  i += 1
    print ('{0} fichiers ont été modifiés'.format(i))
    merci d'avance

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Relisez votre code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for f in files:
           for j in x:
                  mi=os.rename(f, f.replace(j, " "))
    Le "for j in x" s'applique plusieurs fois au même fichier.

    A chaque itération, f.replace(j, " ") retournera f s'il ne trouve pas j... Déjà est-il utile de renommer f en f?
    Puis, lorsque replace retourne autre chose que f, le fichier est renommé... et il n'existe plus!

    Il serait plus logique de fabriquer le nouveau nom de fichier... et de ne faire un rename que si le nom est vraiment nouveau.

    Faites aussi attention au fait que f peut aussi contenir le nom du répertoire: si vous remplacez cette partie là, il y a de forte chance pour que le repertoire destination n'existe pas!

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

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Avant de faire un os.rename, faites plutot un print, pour contrôler que tout se passe bien.

    Car là estimez vous heureux d'avoir un message d'erreur. Vous aurriez pu tomber dans un cas où python aurait réussi à faire qqch, mais ça vous aurais juste mis le bazar intégral dans tous vos fichiers sans retour en arrière possible !

    Et donc le 2ieme conseil est de sauvegarder votre dossier (dans une archive par exemple) avant de faire tourner quoi que ce soit comme code !

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2016
    Messages : 67
    Par défaut

    A chaque itération, f.replace(j, " ") retournera f s'il ne trouve pas j... Déjà est-il utile de renommer f en f?
    Puis, lorsque replace retourne autre chose que f, le fichier est renommé... et il n'existe plus!

    Il serait plus logique de fabriquer le nouveau nom de fichier... et de ne faire un rename que si le nom est vraiment nouveau.
    - W
    merci le problème est d'itérer string de la liste [x] afin de savoir si ces mots sont présents dans les noms des répertoires ou fichiers et les supprimer.
    je voudrais harmoniser mes noms de répertoires et fichiers en enlevant les mots dans la liste [x].

    Faites aussi attention au fait que f peut aussi contenir le nom du répertoire: si vous remplacez cette partie là, il y a de forte chance pour que le repertoire destination n'existe pas!
    c'est effectivement ce qu'il se passe , puis je pas d'abord modifier les noms de fichiers et ensuite les répertoires?

    Merci d'avance

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par Rizcolas62 Voir le message
    c'est effectivement ce qu'il se passe , puis je pas d'abord modifier les noms de fichiers et ensuite les répertoires?
    Il vous faut définir les étapes pour que çà fonctionne sans vous retrouver à scier la branche sur laquelle vous êtes assis (les chemins retournés par glob).

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

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2016
    Messages : 67
    Par défaut
    arff je bloque :/
    et je m'emmêle les pinceaux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import glob,os
    x= ["xao ","you", "ren", "herv", "min"]
    files=[file  for file in glob.iglob('**/*',recursive= True )]
    #print (files)
    i = 0
    k= [(m,n) for m,n in enumerate(x) if (n in files)]
    for m,n in k:
           if bool(k) is True:
                  print (files.replace (n, " "))
                  i += 1
    #print ('{0} fichiers ont été modifiés'.format(i))

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par Rizcolas62 Voir le message
    et je m'emmêle les pinceaux
    Si vous ne commencez pas par décrire (en français) les différentes étapes à effectuer (et validé que çà vole au moins sur le papier et en testant un peu à la main avec des rename lancés depuis un terminal) vous ne savez pas trop ce que vous voulez coder (et moi non plus).

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

Discussions similaires

  1. Dupliquer un fichier à partir d'une liste de noms dans un fichier txt
    Par bigs3232 dans le forum Shell et commandes GNU
    Réponses: 36
    Dernier message: 03/07/2017, 14h46
  2. [XL-2010] Macro pour renommer des fichiers à partir d'une liste de nom de fichiers
    Par thomahh dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 25/01/2013, 17h03
  3. Réponses: 5
    Dernier message: 03/05/2007, 13h44
  4. [Conception] Téléchargement de fichier à partir d'une liste selectionnée
    Par charafax dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/04/2007, 13h53
  5. Sélectionner un fichier à partir d'une liste filtrée
    Par Lenaick dans le forum C++Builder
    Réponses: 7
    Dernier message: 14/03/2006, 11h16

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