À l'aide de os.path.split
ou os.path.basename
que d'autres suggèrent de ne pas fonctionner dans tous les cas: si vous exécutez le script sous Linux et tenter de procéder à un classique de style windows chemin d'accès, il échouera.
Les chemins d'accès Windows pouvez utiliser une barre oblique ou oblique comme séparateur de chemin. Par conséquent, l' ntpath
module (qui est équivalent à l'os.chemin d'accès lors de l'exécution sur windows) sera le même pour tous(1) les chemins d'accès sur toutes les plates-formes.
import ntpath
ntpath.basename("a/b/c")
Bien sûr, si le fichier se termine par une barre oblique, le préfixe sera vide, alors faites votre propre fonction pour traiter avec elle:
def path_leaf(path):
head, tail = ntpath.split(path)
return tail or ntpath.basename(head)
Vérification:
>>> paths = ['a/b/c/', 'a/b/c', '\\a\\b\\c', '\\a\\b\\c\\', 'a\\b\\c',
... 'a/b/../../a/b/c/', 'a/b/../../a/b/c']
>>> [path_leaf(path) for path in paths]
['c', 'c', 'c', 'c', 'c', 'c', 'c']
(1) Il y a une mise en garde: Linux les noms de fichiers peuvent contenir des barres obliques inverses. Donc sur linux, r'a/b\c'
se réfère toujours pour le fichier b\c
dans la a
le dossier, alors que sur Windows, il se réfère toujours à l' c
le fichier dans l' b
sous-dossier de l' a
le dossier. Alors, quand à la fois en avant et en arrière des barres obliques sont utilisés dans un chemin, vous avez besoin de savoir l'associé plate-forme pour être en mesure de les interpréter correctement. Dans la pratique, il est généralement plus sûr de supposer que c'est un chemin d'accès windows depuis des barres obliques inverses sont rarement utilisés dans les noms de fichiers Linux, mais gardez cela à l'esprit lorsque vous code afin de ne pas créer accidentelle des trous de sécurité.