1. A propos de rpartition(sep) – vue d'ensemble
La méthode rpartition() est une méthode des chaînes de caractères en Python. Elle cherche le séparateur passé en argument (sep) en partant de la droite (c'est le "r" de right). Dès qu'elle trouve ce séparateur, elle découpe la chaîne en trois parties :
- tout ce qui se trouve avant la dernière occurrence du séparateur,
- le séparateur lui‑même,
- tout ce qui se trouve après cette dernière occurrence.
Le résultat est toujours un tuple de trois éléments (avant, séparateur, après). Si le séparateur est introuvable, le tuple devient : (chaîne originale, '', '').
Contrairement à partition() qui cherche depuis la gauche, rpartition() est idéale pour isoler la dernière partie d'un chemin, d'une URL ou d'une ligne structurée.
En résumé : rpartition() est une alliée pour les découpages précis par la droite. Elle renvoie un tuple propre, ne modifie pas la chaîne d'origine et gère élégamment l'absence du séparateur.
Comparaison rapide : partition vs rpartition
Visualisons la différence avec un séparateur présent plusieurs fois.
|
1 2 3 4 5 6 7 8 9 10 |
# partition (cherche à gauche) texte = "un-deux-trois" res_gauche = texte.partition("-") print(res_gauche) # Sortie: ('un', '-', 'deux-trois') # rpartition (cherche à droite) res_droite = texte.rpartition("-") print(res_droite) # Sortie: ('un-deux', '-', 'trois') |
2. Syntaxe détaillée et comportement avec séparateur absent
La syntaxe est simple : chaîne.rpartition(séparateur). Le séparateur doit être une chaîne, il peut être plus long qu'un caractère. Si le séparateur n'apparaît pas, Python renvoie un tuple contenant la chaîne d'origine suivie de deux chaînes vides. C'est un comportement prévisible et sécurisé.
Exemple 1 : séparateur classique présent
|
1 2 3 4 5 6 7 8 9 10 |
chemin = "/home/user/documents/note.txt" # On veut isoler le nom de fichier après le dernier slash resultat = chemin.rpartition("/") print(resultat) # Sortie: ('/home/user/documents', '/', 'note.txt') # Accès direct à la dernière partie (le fichier) dernier_element = chemin.rpartition("/")[2] print(dernier_element) # Sortie: note.txt |
Exemple 2 : séparateur introuvable
|
1 2 3 4 5 |
adresse = "192.168.1.1" # On cherche le caractère ':' (absent) tuple_vide = adresse.rpartition(":") print(tuple_vide) # Sortie: ('192.168.1.1', '', '') |
3. Cas concrets et utilisation intelligente de rpartition
La méthode devient très pratique quand on travaille avec des données structurées où l'élément le plus important se trouve à la fin : chemins de fichiers, URLs, logs, ou séparateurs redondants.
3.1 Extraire l'extension d'un fichier
|
1 2 3 4 5 6 7 8 9 |
fichier = "archive.tar.gz" # On veut récupérer l'extension complète après le dernier point avant, point, extension = fichier.rpartition(".") print(f"Avant le dernier point : {avant}") # 'archive.tar' print(f"Séparateur : {point}") # '.' print(f"Extension (y compris le point) : {extension}") # 'gz' # Si on veut juste l'extension sans le point : extension_sans_point = fichier.rpartition(".")[2] print(extension_sans_point) # gz |
3.2 Analyser une URL pour extraire le dernier segment
|
1 2 3 4 5 |
url = "https://docs.python.org/fr/3/library/stdtypes.html" # Dernier segment après le dernier slash protocole_etc, slash, page = url.rpartition("/") print(f"Dossier parent : {protocole_etc}") # 'https://docs.python.org/fr/3/library' print(f"Page cible : {page}") # 'stdtypes.html' |
3.3 Traiter des lignes de log avec séparateur récurrent
|
1 2 3 4 5 6 |
log = "2025-02-26 14:38:12,345 - module - INFO - Tout va bien" # Le dernier tiret précède le message _, separateur, message = log.rpartition(" - ") print(f"Message extrait : {message}") # Sortie: Message extrait : INFO - Tout va bien # (car le séparateur est " - " avec espaces) |
4. Bonnes pratiques & alternatives
rpartition() est robuste, mais quelques points méritent attention.
4.1 Ne pas confondre avec rsplit()
rsplit() renvoie une liste de morceaux, alors que rpartition() renvoie toujours un triplet. Ce dernier est plus adapté quand on veut absolument isoler la partie droite avec son séparateur.
|
1 2 3 4 5 6 |
email = "utilisateur@domaine.com" # rpartition pour récupérer le domaine après le dernier '@' local, arobase, domaine = email.rpartition("@") print(f"Domaine : {domaine}") # domaine.com # avec rsplit, on obtiendrait une liste qu'il faut indicer print(email.rsplit("@", 1)[1]) # même résultat mais moins lisible |
4.2 Séparateur vide ? Interdit
Python lève une exception si le séparateur est une chaîne vide.
|
1 2 3 4 5 6 |
# test_sep_vide.py try: "python".rpartition("") except ValueError as e: print(f"Erreur attrapée : {e}") # Sortie: Erreur attrapée : empty separator |
4.3 Utilisation avec des séparateurs longs
|
1 2 3 4 5 6 7 |
citation = "Le vrai voyage ce n'est pas de chercher de nouveaux paysages, mais d'avoir de nouveaux yeux." # Récupérer la partie après le dernier " de " avant, sep, apres = citation.rpartition(" de ") print(avant) # "Le vrai voyage ce n'est pas de chercher de nouveaux paysages, mais d'avoir nouveaux yeux." # (attention : la chaîne avant ne contient pas "de " final, le séparateur est isolé) print(sep) # " de " print(apres) # "nouveaux yeux." |
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/



