HOWTO · Python
Python obtient un nom de fichier sans extension du chemin
Ce tutoriel montre comment obtenir un nom de fichier sans extension à partir du chemin d'accès au fichier en Python
Sur cette page
Pour obtenir, à partir d’un chemin, un nom de fichier sans son suffixe final, utilisez Path(file_path).stem. Par exemple, le chemin Desktop/folder/myfile.txt a pour nom sans suffixe myfile. Path.stem est une propriété : accédez-y sans parenthèses. Les exemples ci-dessous utilisent une chaîne de chemin et affichent le nom obtenu.
Obtenir un nom de fichier sans son suffixe final avec Path.stem
pathlib.Path gère les séparateurs de chemin de la plateforme actuelle : vous n’avez donc pas à découper le chemin vous-même. Créez un objet Path à partir de la chaîne, puis lisez sa propriété stem. Elle supprime le suffixe final tout en conservant les points précédents dans le nom de fichier.
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
from pathlib import Path
file_path = "Desktop/folder/myfile.txt"
file_name = Path(file_path).stem
print(file_name)
myfile
Utiliser os.path.splitext() pour supprimer le suffixe final
La fonction os.path.splitext() de la bibliothèque standard renvoie une paire : la partie du chemin précédant le suffixe final et le suffixe lui-même. Sélectionnez le premier élément pour supprimer ce suffixe. Si vous avez aussi besoin du dernier composant du chemin, le découpage sur / convient à cet exemple, mais dépend de ce séparateur et est moins portable d’un système d’exploitation à l’autre.
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
import os
file_path = "Desktop/folder/myfile.txt"
path_without_suffix = os.path.splitext(file_path)[0]
file_name = path_without_suffix.split("/")[-1]
print(file_name)
myfile
Extraire le nom de base avant de supprimer le suffixe
Pour obtenir une solution os.path qui tient compte du chemin, appelez d’abord os.path.basename() pour extraire le dernier composant, puis transmettez le résultat à os.path.splitext(). Le nom de base de Desktop/folder/myfile.txt est myfile.txt ; après suppression de son suffixe final, il devient myfile. Cette méthode évite de choisir manuellement un séparateur de chemin.
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
import os
file_path = "Desktop/folder/myfile.txt"
basename = os.path.basename(file_path)
file_name = os.path.splitext(basename)[0]
print(file_name)
myfile
Gérer les suffixes composés et les points dans les noms de fichier
Ces méthodes standard suppriment un seul suffixe final, et non toutes les parties séparées par des points. Pour myfile.tar.gz, Path.stem et os.path.splitext() renvoient toutes deux myfile.tar. Cela convient si seul .gz constitue le suffixe. Si l’application considère .tar.gz comme un suffixe composé, traitez explicitement ce suffixe connu, par exemple avec name.removesuffix(".tar.gz"). str.removesuffix() a été ajouté dans Python 3.9 : cette expression nécessite donc Python 3.9 ou une version ultérieure. Pour les versions antérieures, utilisez name[:-len(".tar.gz")] if name.endswith(".tar.gz") else name afin de supprimer cette terminaison précise en toute sécurité.
Un nom sans suffixe, comme README, reste README avec Path.stem et os.path.splitext(). Un nom commençant par un point, comme .bashrc, est traité comme un fichier caché sans suffixe : Path(".bashrc").stem et os.path.splitext(".bashrc")[0] renvoient tous deux .bashrc. En revanche, archive. se termine par un point : Path.stem le conserve et renvoie archive., tandis que os.path.splitext() traite le point comme un suffixe et renvoie archive.
Le découpage au premier point a un effet différent : il tronque le reste du nom. Pour my.file.tar.gz, il renvoie my, tandis que la suppression du seul suffixe final donne my.file.tar. Choisissez selon que vous voulez supprimer un suffixe composé connu, uniquement le dernier suffixe ou tout ce qui suit le premier point. Le découpage au premier point transforme aussi .bashrc en chaîne vide ; il ne convient donc pas si les noms commençant par un point doivent être conservés.
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
from pathlib import Path
for name in ("myfile.tar.gz", "my.file.tar.gz"):
print(Path(name).stem)
print(name.split(".", 1)[0])
myfile.tar
myfile
my.file.tar
my