En Python, supposons que j'ai un chemin comme celui-ci:
/folderA/folderB/folderC/folderD/
Comment puis-je obtenir uniquement la partie folderD
?
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 _''
_.
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'
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
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'
_
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)
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:]
path = "/folderA/folderB/folderC/folderD/"
last = path.split('/').pop()
str = "/folderA/folderB/folderC/folderD/"
print str.split("/")[-2]