Changer l'extension d'un fichier avec pathlib.Path.with_suffix() en Python

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.

Sortie :

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.

Sortie :

La propriété stem permet quant à elle d'obtenir le nom sans son dernier suffixe.

Sortie :

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.

Sortie :

Le dossier contenant le fichier est conservé. Seul le suffixe du dernier élément du chemin est remplacé.

Sortie :

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.

Sortie :

Cette technique peut être utilisée lorsqu'un programme construit d'abord le nom d'un fichier puis lui attribue une extension.

Sortie :

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.

Sortie :

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("").

Sortie :

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.

Sortie :

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.

Sortie possible :

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.

Sortie possible :

Pour parcourir également les sous-dossiers, nous pouvons utiliser rglob().

Sortie possible :

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.

Sortie :

Avec with_suffix(), seul le dernier suffixe est remplacé. Ainsi, remplacer .gz par .zip conserve la partie .tar.

Sortie :

Si nous souhaitons obtenir sauvegarde.zip, nous pouvons supprimer successivement les deux suffixes avant d'ajouter le nouveau.

Sortie :

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.

Sortie possible :

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.

Sortie possible :

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.

Sortie possible :

 


 


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/


Leave a Reply

Your email address will not be published. Required fields are marked *