- À propos de Path.with_suffix()
- Obtenir l'extension d'un fichier avec Path.suffix
- Changer une extension avec Path.with_suffix()
- Ajouter une extension à un chemin
- Supprimer l'extension d'un chemin
- Changer l'extension et renommer le fichier
- Changer l'extension de plusieurs fichiers
- Manipuler les fichiers ayant plusieurs extensions
- Erreurs et précautions avec Path.with_suffix()
- À retenir
1. À propos de Path.with_suffix()
Le module pathlib fournit la classe Path permettant de manipuler facilement les chemins des fichiers et des dossiers. Parmi ses nombreuses méthodes, Path.with_suffix() permet de construire un nouveau chemin en remplaçant le suffixe, généralement utilisé comme extension du fichier.
Il est important de comprendre que with_suffix() ne modifie pas directement le fichier présent sur le disque. Cette méthode retourne simplement un nouvel objet Path contenant le chemin modifié.
Le programme suivant crée un chemin vers cours.txt puis construit un nouveau chemin avec l'extension .pdf.
1 2 3 4 5 6 7 | from pathlib import Path fichier = Path("cours.txt") nouveau = fichier.with_suffix(".pdf") print("Original :", fichier) print("Nouveau :", nouveau) |
Sortie :
1 2 | Original : cours.txt Nouveau : cours.pdf |
2. Obtenir l'extension d'un fichier avec Path.suffix
Avant de modifier une extension, nous pouvons la récupérer avec la propriété Path.suffix. Elle retourne le dernier suffixe du nom du fichier, généralement son extension.
Le programme suivant récupère l'extension du fichier cours.txt.
1 2 3 4 5 6 | from pathlib import Path fichier = Path("cours.txt") print("Nom :", fichier.name) print("Extension :", fichier.suffix) |
Sortie :
1 2 | Nom : cours.txt Extension : .txt |
La propriété stem permet quant à elle d'obtenir le nom sans son dernier suffixe.
1 2 3 4 5 6 7 | from pathlib import Path fichier = Path("documents/cours.pdf") print("Nom :", fichier.name) print("Nom sans extension :", fichier.stem) print("Extension :", fichier.suffix) |
Sortie :
1 2 3 | Nom : cours.pdf Nom sans extension : cours Extension : .pdf |
3. Changer une extension avec Path.with_suffix()
La méthode with_suffix() remplace le suffixe actuel par celui indiqué en argument. Le nouveau suffixe doit normalement commencer par un point.
Le programme suivant transforme le chemin rapport.txt en rapport.pdf.
1 2 3 4 5 6 | from pathlib import Path fichier = Path("rapport.txt") nouveau = fichier.with_suffix(".pdf") print(nouveau) |
Sortie :
1 | rapport.pdf |
Le dossier contenant le fichier est conservé. Seul le suffixe du dernier élément du chemin est remplacé.
1 2 3 4 5 6 | from pathlib import Path fichier = Path("documents/python/cours.txt") nouveau = fichier.with_suffix(".html") print(nouveau) |
Sortie :
1 | documents/python/cours.html |
Attention : le fichier cours.txt n'a pas encore été renommé sur le disque. Nous avons uniquement construit un nouveau chemin.
4. Ajouter une extension à un chemin
Lorsque le dernier élément d'un chemin ne possède pas de suffixe, with_suffix() permet également de lui en ajouter un.
Le programme suivant ajoute l'extension .txt au chemin cours.
1 2 3 4 5 6 | from pathlib import Path fichier = Path("cours") nouveau = fichier.with_suffix(".txt") print(nouveau) |
Sortie :
1 | cours.txt |
Cette technique peut être utilisée lorsqu'un programme construit d'abord le nom d'un fichier puis lui attribue une extension.
1 2 3 4 5 6 | from pathlib import Path nom = Path("documents/rapport") fichier = nom.with_suffix(".pdf") print(fichier) |
Sortie :
1 | documents/rapport.pdf |
5. Supprimer l'extension d'un chemin
La méthode with_suffix() permet également de supprimer le dernier suffixe en lui passant une chaîne vide.
Le programme suivant supprime l'extension .txt du chemin cours.txt.
1 2 3 4 5 6 | from pathlib import Path fichier = Path("cours.txt") nouveau = fichier.with_suffix("") print(nouveau) |
Sortie :
1 | cours |
Cette opération construit uniquement un nouveau chemin sans suffixe. Elle ne supprime ni ne modifie directement le fichier original sur le disque.
Avec plusieurs suffixes, seul le dernier est supprimé à chaque appel de with_suffix("").
1 2 3 4 5 6 | from pathlib import Path fichier = Path("sauvegarde.tar.gz") nouveau = fichier.with_suffix("") print(nouveau) |
Sortie :
1 | sauvegarde.tar |
6. Changer l'extension et renommer le fichier
with_suffix() ne renomme pas physiquement le fichier. Pour changer réellement son nom sur le disque, nous pouvons combiner with_suffix() avec rename().
Supposons que le fichier cours.txt existe. Le programme suivant construit le chemin cours.old, puis renomme réellement le fichier.
1 2 3 4 5 6 7 8 | from pathlib import Path fichier = Path("cours.txt") nouveau = fichier.with_suffix(".old") fichier.rename(nouveau) print("Nouveau nom :", nouveau) |
Sortie :
1 | Nouveau nom : cours.old |
Il faut distinguer ce renommage de fichier d'une véritable conversion de format. Par exemple, remplacer .txt par .pdf dans le nom ne transforme pas le contenu texte en véritable document PDF.
Le programme suivant vérifie d'abord l'existence du fichier avant de modifier son extension dans son nom.
1 2 3 4 5 6 7 8 9 10 | from pathlib import Path fichier = Path("rapport.txt") if fichier.is_file(): nouveau = fichier.with_suffix(".old") fichier.rename(nouveau) print("Fichier renommé :", nouveau) else: print("Le fichier n'existe pas.") |
Sortie possible :
1 | Fichier renommé : rapport.old |
7. Changer l'extension de plusieurs fichiers
Nous pouvons combiner glob(), with_suffix() et rename() pour modifier le suffixe dans le nom de plusieurs fichiers.
Le programme suivant recherche tous les fichiers .txt du dossier documents puis remplace leur extension par .old.
1 2 3 4 5 6 7 8 | from pathlib import Path dossier = Path("documents") for fichier in dossier.glob("*.txt"): nouveau = fichier.with_suffix(".old") fichier.rename(nouveau) print(fichier.name, "->", nouveau.name) |
Sortie possible :
1 2 3 | cours.txt -> cours.old exercices.txt -> exercices.old notes.txt -> notes.old |
Pour parcourir également les sous-dossiers, nous pouvons utiliser rglob().
1 2 3 4 5 6 7 8 | from pathlib import Path dossier = Path("projet") for fichier in dossier.rglob("*.bak"): nouveau = fichier.with_suffix(".old") fichier.rename(nouveau) print(nouveau) |
Sortie possible :
1 2 3 | projet/config.old projet/data/sauvegarde.old projet/tests/resultat.old |
8. Manipuler les fichiers ayant plusieurs extensions
Certains fichiers possèdent plusieurs suffixes, par exemple sauvegarde.tar.gz. La propriété suffix retourne uniquement le dernier suffixe, tandis que suffixes retourne la liste des suffixes reconnus par pathlib.
Le programme suivant affiche ces informations.
1 2 3 4 5 6 7 | from pathlib import Path fichier = Path("sauvegarde.tar.gz") print("Suffixe :", fichier.suffix) print("Suffixes :", fichier.suffixes) print("Stem :", fichier.stem) |
Sortie :
1 2 3 | Suffixe : .gz Suffixes : ['.tar', '.gz'] Stem : sauvegarde.tar |
Avec with_suffix(), seul le dernier suffixe est remplacé. Ainsi, remplacer .gz par .zip conserve la partie .tar.
1 2 3 4 5 6 | from pathlib import Path fichier = Path("sauvegarde.tar.gz") nouveau = fichier.with_suffix(".zip") print(nouveau) |
Sortie :
1 | sauvegarde.tar.zip |
Si nous souhaitons obtenir sauvegarde.zip, nous pouvons supprimer successivement les deux suffixes avant d'ajouter le nouveau.
1 2 3 4 5 6 7 8 | from pathlib import Path fichier = Path("sauvegarde.tar.gz") sans_gz = fichier.with_suffix("") sans_tar = sans_gz.with_suffix("") nouveau = sans_tar.with_suffix(".zip") print(nouveau) |
Sortie :
1 | sauvegarde.zip |
9. Erreurs et précautions avec Path.with_suffix()
La méthode with_suffix() attend un suffixe valide. Dans l'usage classique, le nouveau suffixe doit commencer par un point, par exemple .txt, .pdf ou .html. Une chaîne vide est utilisée pour supprimer le suffixe.
Le programme suivant utilise volontairement un suffixe incorrect ne commençant pas par un point.
1 2 3 4 5 6 7 8 9 | from pathlib import Path fichier = Path("cours.txt") try: nouveau = fichier.with_suffix("pdf") print(nouveau) except ValueError as erreur: print("Erreur :", erreur) |
Sortie possible :
1 | Erreur : Invalid suffix 'pdf' |
Une autre précaution importante consiste à vérifier si la destination existe déjà avant de renommer réellement un fichier. Le programme suivant effectue cette vérification.
1 2 3 4 5 6 7 8 9 10 11 12 | from pathlib import Path fichier = Path("cours.txt") nouveau = fichier.with_suffix(".old") if not fichier.is_file(): print("Le fichier source n'existe pas.") elif nouveau.exists(): print("Le fichier de destination existe déjà.") else: fichier.rename(nouveau) print("Fichier renommé :", nouveau) |
Sortie possible :
1 | Fichier renommé : cours.old |
Enfin, changer le suffixe d'un chemin ne signifie pas convertir le format du fichier. Une conversion de JPG vers PNG, de DOCX vers PDF ou d'un autre format vers un autre nécessite un traitement adapté au contenu du fichier.
10. À retenir
La méthode Path.with_suffix() du module pathlib permet de construire facilement un nouveau chemin en modifiant le dernier suffixe de son nom.
- with_suffix(".pdf") remplace le dernier suffixe par .pdf.
- with_suffix() retourne un nouvel objet Path.
- with_suffix() ne modifie pas directement le fichier présent sur le disque.
- suffix retourne le dernier suffixe d'un chemin.
- suffixes retourne la liste des suffixes reconnus.
- stem retourne le nom sans le dernier suffixe.
- with_suffix("") supprime le dernier suffixe.
- rename() peut être combinée avec with_suffix() pour renommer réellement un fichier.
- glob() et rglob() permettent d'appliquer cette opération à plusieurs fichiers.
- Modifier une extension dans le nom ne réalise pas une conversion du format du fichier.
Le programme suivant présente un cas courant : vérifier l'existence d'un fichier, construire son nouveau chemin avec with_suffix() puis le renommer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from pathlib import Path fichier = Path("documents/cours.txt") if fichier.is_file(): nouveau = fichier.with_suffix(".old") if not nouveau.exists(): fichier.rename(nouveau) print("Ancien chemin :", fichier) print("Nouveau chemin :", nouveau) else: print("La destination existe déjà.") else: print("Le fichier n'existe pas.") |
Sortie possible :
1 2 | Ancien chemin : documents/cours.txt Nouveau chemin : documents/cours.old |
Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/


