Ordinateur portable moderne pose sur un bureau en bois affichant des lignes de code

Renommer un fichier avec Python : os.rename et pathlib expliqués

Renommer un fichier à la main, c’est rapide. En renommer 500 à la main, c’est l’enfer. Python règle ça en quelques lignes, sans quitter son éditeur.

Pourquoi renommer un fichier avec Python ?

Automatiser le renommage, c’est utile dès qu’on sort du cas ponctuel : organiser des exports CSV, horodater des logs, préparer des images pour un pipeline de données. Le module os est natif — aucune installation requise. Trois lignes de code suffisent pour couvrir 90 % des cas courants.

os.rename() : la méthode classique

Une interface proposant des outils pour renommer efficacement des fichiers multimédias.

C’est la solution la plus répandue. Elle fait partie du module standard os, disponible sur tous les systèmes.

import os

os.rename("rapport.txt", "rapport_2024.txt")

os.rename() prend deux arguments obligatoires :

  • src : le chemin du fichier à renommer (relatif ou absolu)
  • dst : le nouveau chemin (ou nom) cible

La fonction ne retourne rien. Si la destination existe déjà, Python lève une FileExistsError sur Windows (sur Linux, il écrase silencieusement).

Syntaxe et paramètres

os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)

Les deux paramètres src_dir_fd et dst_dir_fd sont rarement utiles en pratique — ils servent à pointer vers un descripteur de répertoire. Pour la grande majorité des usages, on passe uniquement src et dst.

Préférer les chemins absolus évite les erreurs liées au répertoire courant d’exécution, surtout dans les scripts lancés depuis un IDE ou un scheduler.

Gérer les erreurs avec try/except

Un fichier absent, un nom déjà pris, un dossier sans permission d’écriture — autant de cas qui font planter un script sans prévenir. Mieux vaut les attraper proprement :

import os

try:
    os.rename("ancien_nom.txt", "nouveau_nom.txt")
    print("Fichier renommé avec succès.")
except FileNotFoundError:
    print("Erreur : fichier source introuvable.")
except FileExistsError:
    print("Erreur : un fichier avec ce nom existe déjà.")
except PermissionError:
    print("Erreur : permissions insuffisantes.")
except OSError as e:
    print(f"Erreur système : {e}")

Les exceptions à connaître :

  • FileNotFoundError : le fichier source n’existe pas
  • FileExistsError : le nom cible est déjà pris (Windows)
  • PermissionError : droits d’écriture manquants sur le dossier
  • IsADirectoryError : conflit entre un fichier et un dossier du même nom
READ  Comment utiliser les pseudo-éléments ::before et ::after en CSS ?

pathlib.Path.rename() : l’approche moderne

Un livre de code Python ouvert repose sur un bureau en bois, accompagné d’une horloge numérique, d’une tasse fumante et de lumière du soleil filtrant par une fenêtre.

Disponible depuis Python 3.4, pathlib offre une syntaxe orientée objet plus lisible. C’est l’approche recommandée dans le code Python contemporain.

from pathlib import Path

Path("rapport.txt").rename("rapport_2024.txt")

Contrairement à os.rename(), la méthode retourne un objet Path pointant vers le fichier renommé — pratique pour chaîner des opérations. Pour écraser un fichier existant sans exception, Path.replace() fait le travail :

Path("ancien.txt").replace("nouveau.txt")  # écrase si 'nouveau.txt' existe déjà

Renommer plusieurs fichiers d’un coup

La vraie puissance de Python se voit quand on traite un dossier entier. Avec os.listdir() et une boucle, chaque fichier passe à la caisse. Pour les cas non-scriptés, des outils graphiques comme TheRenamer permettent de renommer des fichiers en masse sans écrire une seule ligne de code.

import os

dossier = "/home/user/exports/"
for i, nom in enumerate(os.listdir(dossier), start=1):
    ancien = os.path.join(dossier, nom)
    nouveau = os.path.join(dossier, f"export_{i:03d}.csv")
    os.rename(ancien, nouveau)

Pour cibler uniquement certains fichiers (par extension, par préfixe), le module glob filtre par motif :

import glob, os

for fichier in glob.glob("/home/user/exports/*.txt"):
    nouveau = fichier.replace(".txt", "_archive.txt")
    os.rename(fichier, nouveau)

Cas d’usage fréquents pour le renommage en masse :

  • Ajouter une date ou un numéro séquentiel à des logs
  • Changer l’extension de tous les fichiers d’un dossier
  • Préfixer des images avant un import dans un CMS
  • Nettoyer des noms de fichiers avec des espaces ou des caractères spéciaux

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *