Contactez-nous

Obtenir le nom de base, le répertoire parent, etc.

Apprenez à extraire des informations des chemins de fichiers en Python en utilisant les fonctions du module 'os.path'. Obtenez le nom de base, le répertoire parent, le nom du fichier sans extension, et plus encore.

os.path.basename() : obtenir le nom de base

La fonction `os.path.basename()` du module `os.path` permet d'obtenir le nom de base d'un chemin de fichier, c'est-à-dire la dernière partie du chemin (le nom du fichier ou du répertoire lui-même).

Syntaxe :

import os

nom_base = os.path.basename(chemin)
  • `chemin` : Le chemin de fichier complet (ou relatif).
  • `os.path.basename(chemin)` retourne une chaîne de caractères représentant le nom de base.

Exemples :

import os

chemin = "/home/utilisateur/documents/rapport.pdf"
nom_base = os.path.basename(chemin)
print(nom_base)  # Affiche "rapport.pdf"

chemin = "/home/utilisateur/images/"
nom_base = os.path.basename(chemin)
print(nom_base) # Affiche "" (car le chemin se termine par un séparateur)

chemin = "/home/utilisateur/musique"
nom_base = os.path.basename(chemin)
print(nom_base)  # Affiche "musique"

chemin = "image.jpg"
nom_base = os.path.basename(chemin)
print(nom_base) # Affiche "image.jpg"

Notez que `os.path.basename()` ne vérifie pas si le fichier ou le répertoire existe réellement. Il travaille uniquement sur la chaîne de caractères représentant le chemin.

os.path.dirname() : obtenir le répertoire parent

La fonction `os.path.dirname()` permet d'obtenir le nom du répertoire parent d'un fichier ou d'un répertoire.

Syntaxe :

import os

repertoire_parent = os.path.dirname(chemin)
  • `chemin` : Le chemin de fichier complet (ou relatif).
  • `os.path.dirname(chemin)` retourne une chaîne de caractères représentant le chemin du répertoire parent.

Exemples :

import os

chemin = "/home/utilisateur/documents/rapport.pdf"
repertoire_parent = os.path.dirname(chemin)
print(repertoire_parent)  # Affiche "/home/utilisateur/documents"

chemin = "/home/utilisateur/images/"
repertoire_parent = os.path.dirname(chemin)
print(repertoire_parent)  # Affiche "/home/utilisateur/images"

chemin = "/home/utilisateur/musique"
repertoire_parent = os.path.dirname(chemin)
print(repertoire_parent)  # Affiche "/home/utilisateur"

chemin = "image.jpg"
repertoire_parent = os.path.dirname(chemin)
print(repertoire_parent) # Affiche "" (chaîne vide, car le fichier est dans le répertoire courant)

Notez que `os.path.dirname()` ne vérifie pas si le répertoire parent existe réellement. Il travaille uniquement sur la chaîne de caractères représentant le chemin.

os.path.split() : diviser le chemin en (tête, queue)

La fonction `os.path.split()` permet de diviser un chemin de fichier en deux parties : le répertoire parent (la "tête") et le nom de base (la "queue").

Syntaxe :

import os

tete, queue = os.path.split(chemin)
  • `chemin` : Le chemin de fichier complet (ou relatif).
  • `os.path.split(chemin)` retourne un *tuple* de deux chaînes de caractères : `(tete, queue)`. `tete` est le chemin du répertoire parent (tout ce qui précède le dernier séparateur de répertoire), et `queue` est le nom de base (le dernier composant du chemin).

Exemple :

import os

chemin = "/home/utilisateur/documents/rapport.pdf"
tete, queue = os.path.split(chemin)
print("Tête :", tete)     # Affiche "/home/utilisateur/documents"
print("Queue :", queue)   # Affiche "rapport.pdf"

`os.path.split()` est équivalent à utiliser `os.path.dirname()` et `os.path.basename()` séparément, mais en une seule opération.

os.path.splitext() : séparer le nom de fichier et l'extension

La fonction `os.path.splitext()` permet de séparer le nom de base d'un fichier de son extension.

Syntaxe :

import os

nom_sans_extension, extension = os.path.splitext(chemin)
  • `chemin` : Le chemin de fichier (ou juste le nom de fichier).
  • `os.path.splitext(chemin)` retourne un tuple de deux chaînes de caractères : `(nom_sans_extension, extension)`. `nom_sans_extension` est le nom de base du fichier sans l'extension, et `extension` est l'extension du fichier, y compris le point (`.`). Si le fichier n'a pas d'extension, `extension` sera une chaîne vide.

Exemples :

import os

chemin = "/home/utilisateur/documents/rapport.pdf"
nom_sans_extension, extension = os.path.splitext(chemin)
print("Nom sans extension :", nom_sans_extension)  # Affiche "/home/utilisateur/documents/rapport"
print("Extension :", extension)            # Affiche ".pdf"

fichier = "image.jpg"
nom, ext = os.path.splitext(fichier) 
print(nom, ext) # image .jpg

fichier_sans_extension = "monfichier"
nom, ext = os.path.splitext(fichier_sans_extension)
print(nom, ext) # monfichier 

#Cas particulier
fichier = ".bashrc"
print(os.path.splitext(fichier)) #('.bashrc', '')

fichier = "archive.tar.gz"
print(os.path.splitext(fichier)) #('archive.tar', '.gz')

Notez que `os.path.splitext()` ne sépare que la *dernière* extension. Si un fichier a plusieurs extensions (par exemple, `"archive.tar.gz"`), seule la dernière (`.gz`) sera séparée. Pour séparer toutes les extensions, vous devriez utiliser une boucle ou une autre méthode.

Combiner les fonctions

Vous pouvez combiner ces fonctions pour extraire différentes parties d'un chemin de fichier :

import os

chemin = "/home/utilisateur/documents/rapport.final.pdf"

# Obtenir le répertoire parent
repertoire_parent = os.path.dirname(chemin)
print("Répertoire parent :", repertoire_parent)  # /home/utilisateur/documents

# Obtenir le nom de base
nom_base = os.path.basename(chemin)
print("Nom de base :", nom_base)  # rapport.final.pdf

# Séparer le nom de base et l'extension
nom_sans_extension, extension = os.path.splitext(nom_base)
print("Nom sans extension :", nom_sans_extension)  # rapport.final
print("Extension :", extension)            # .pdf

# Obtenir le nom du fichier sans aucune extension (en utilisant splitext deux fois):
nom_fichier, _ = os.path.splitext(nom_sans_extension)
print("Nom du fichier :", nom_fichier)          # rapport

En combinant ces fonctions, vous pouvez extraire et manipuler n'importe quelle partie d'un chemin de fichier de manière portable et efficace.