web-dev-qa-db-fra.com

Comment obtenir uniquement la dernière partie d'un chemin en Python?

En Python, supposons que j'ai un chemin comme celui-ci:

/folderA/folderB/folderC/folderD/

Comment puis-je obtenir uniquement la partie folderD?

192
pepero

Utilisez os.path.normpath , puis os.path.basename :

_>>> os.path.basename(os.path.normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
_

Le premier supprime les barres obliques, le second vous donne la dernière partie du chemin. Utiliser uniquement basename donne tout après la dernière barre oblique, qui est dans ce cas _''_.

319
Fred Foo

Vous pourriez faire

>>> import os
>>> os.path.basename('/folderA/folderB/folderC/folderD')

PDATE1: Cette approche fonctionne si vous lui donnez /folderA/folderB/folderC/folderD/xx.py. Cela donne xx.py comme nom de base. Ce qui n'est pas ce que vous voulez, je suppose. Pour que vous puissiez faire ceci -

>>> import os
>>> path = "/folderA/folderB/folderC/folderD"
>>> if os.path.isdir(path):
        dirname = os.path.basename(path)

PDATE2: Comme l'a souligné Lars, apporter des modifications afin de prendre en compte le '/' suivant.

>>> from os.path import normpath, basename
>>> basename(normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
20
Srikar Appalaraju

Voici mon approche:

>>> import os
>>> print os.path.basename(
        os.path.dirname('/folderA/folderB/folderC/folderD/test.py'))
folderD
>>> print os.path.basename(
        os.path.dirname('/folderA/folderB/folderC/folderD/'))
folderD
>>> print os.path.basename(
        os.path.dirname('/folderA/folderB/folderC/folderD'))
folderC
14
Mike Mitterer

Avec python 3, vous pouvez utiliser le module pathlib ( pathlib.PurePath par exemple):

_>>> import pathlib

>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/')
>>> path.name
'folderD'
_

Si vous voulez le dernier nom de dossier où se trouve un fichier:

_>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/file.py')
>>> path.parent.name
'folderD'
_
9
jinnlao

Je cherchais une solution pour obtenir le dernier nom de dossier où se trouve le fichier. Je viens d'utiliser split deux fois pour obtenir la bonne partie. Ce n'est pas la question mais google m'a transféré ici.

pathname = "/folderA/folderB/folderC/folderD/filename.py"
head, tail = os.path.split(os.path.split(pathname)[0])
print(head + "   "  + tail)
7
user1767754

Une solution naïve (Python 2.5.2+):

s="/path/to/any/folder/orfile"
desired_dir_or_file = s[s.rindex('/',0,-1)+1:-1] if s.endswith('/') else s[s.rindex('/')+1:]
2
mshsayem
path = "/folderA/folderB/folderC/folderD/"
last = path.split('/').pop()
0
GSto
str = "/folderA/folderB/folderC/folderD/"
print str.split("/")[-2]
0
Andrew Sledge