Problème de renommage fichiers (Maj et Min) avec code Python
Utilisateur anonyme -
Bonjour,
Je vous fais une description rapide de ce que je souhaite faire, je dois renommer en masse des fichiers pour faire des DOE à l'aide de python en utilisant un fichier source Excel.
J'ai défini un format spécifique à respecter sur le fichier source Excel, sauf que Python ne fait pas la différence entre les majuscules et les minuscules de l'ancien format et du nouveau format. Voici un exemple pour mieux illustrer la situation :
- Ancien nom : PLANMAJ_Exemple-01
- Nouveau nom : PlanMaj_Exemple-01
Je précise que c'est le format le plus basique d'un nom de fichier que je peux avoir, j'ai des noms très variables et longs mais la clé qui me permet de retrouver le fichier est ce numéro unique "Exemple-01".
Le code considère que ça existe déjà et donc il ignore ce fichier et garde l'ancien nom.
Je vous partage le code que j'ai généré avec ChatGPT (je ne suis pas du tout informaticien, je me fait aider l'IA pour avancer sur mes tâches :) ) :
import pandas as pd import os # Chemin du dossier contenant les fichiers à renommer dossier = r"Chemin de mon dossier" # Chemin vers le fichier Excel contenant les correspondances de noms de fichiers chemin_fichier_excel = r"Chemin de mon dossier" # Lire le fichier Excel df = pd.read_excel(chemin_fichier_excel) # Parcourir chaque ligne du fichier Excel et renommer les fichiers for index, row in df.iterrows(): ancien_nom_partiel = row['Nom à rechercher'] nouveau_nom = row['Nouveau nom'] # Récupérer la liste des fichiers correspondants dans le dossier fichiers_correspondants = [ fichier for fichier in os.listdir(dossier) if ancien_nom_partiel.lower() in fichier.lower() ] # Parcourir chaque fichier correspondant et le renommer for fichier in fichiers_correspondants: ancien_chemin = os.path.join(dossier, fichier) nom_fichier, extension = os.path.splitext(fichier) nouveau_nom_complet = nouveau_nom + extension nouveau_chemin = os.path.join(dossier, nouveau_nom_complet) if not os.path.exists(nouveau_chemin): os.rename(ancien_chemin, nouveau_chemin) print(f"Le fichier {fichier} a été renommé en {nouveau_nom_complet}.") else: print(f"Le fichier {fichier} existe déjà avec le nouveau nom {nouveau_nom_complet}.") print("Terminé !")
Je vous remercie par avance pour votre aide sur ce sujet.
Bien à vous
Windows / Chrome 114.0.0.0
- Problème de renommage fichiers (Maj et Min) avec code Python
- Code ascii - Guide
- Maj to min - Guide
- Citizen code python - Accueil - Outils
- È maj - Guide
- Code de déverrouillage oublié - Guide
1 réponse
Bonjour
Pour tes prochains posts, merci d'utiliser la coloration syntaxique, comme décrit là https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
Comme quoi, il n'est pas bon ChatGPT... Ce code est compliqué, alambiqué.
Dans un premier temps tu récupères les noms de fichiers en texte (donc sensible à la casse), tu les passes en minuscules (ce qui n'est pas cohérent avec ton besoin manifestement).
Puis tu cherches dans les noms en minuscules si un texte y apparaît (pas si le fichier s'appelle "toto", mais si y a "toto" dedans, donc " la petite histoire de toto, assis au fond de classe près du radiateur" sera pris dans ton traitement. Et j'ai pas l'impression que ce soit ça que tu cherches selon ma compréhension de ton message.
Ensuite tu bricoles des chemins complets, et tu demandes à windows s'ils existent.
Mais le système de fichiers de windows est insensible à la casse, donc forcément, il te répond que oui. Et il ne renomme pas.
Avant d'aller plus loin, je voudrais savoir, si l'ancien nom de fichier doit
- être exactement ce qui est écrit dans la colonne "Nom à chercher", casse comprise?
- être le nom écrit dans la colonne mais insensible à la case
- contenir le nom écrit dans la colonne, sensible à la casse
- contenir le nom écrit dans la colonne, insensible à la casse (ce que le code fait pour l'instant)