Réponses:
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 de fin, le second vous donne la dernière partie du chemin. L'utilisation ne basenamedonne que tout après la dernière barre oblique, ce qui est le cas dans ce cas ''.
Vous pourriez faire
>>> import os
>>> os.path.basename('/folderA/folderB/folderC/folderD')
UPDATE1: Cette approche fonctionne si vous lui donnez /folderA/folderB/folderC/folderD/xx.py. Cela donne xx.py comme nom de base. Ce n'est pas ce que vous voulez, je suppose. Vous pouvez donc faire cela -
>>> import os
>>> path = "/folderA/folderB/folderC/folderD"
>>> if os.path.isdir(path):
dirname = os.path.basename(path)
MISE À JOUR2: Comme l'a souligné Lars , apportant des modifications afin d'accommoder le «/» de fin.
>>> from os.path import normpath, basename
>>> basename(normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
Avec python 3, vous pouvez utiliser le pathlibmodule ( pathlib.PurePathpar 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'
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
Je cherchais une solution pour obtenir le dernier nom de dossier où se trouve le fichier, je viens de l'utiliser splitdeux 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:]
J'aime la méthode des pièces de Path pour cela:
grandparent_directory, parent_directory, filename = Path(export_filename).parts[-3:]
log.info(f'{t: <30}: {num_rows: >7} Rows exported to {grandparent_directory}/{parent_directory}/{filename}')
path = "/folderA/folderB/folderC/folderD/"
last = path.split('/').pop()
os.pathmodule.
str = "/folderA/folderB/folderC/folderD/"
print str.split("/")[-2]
folderD. pasfolderC
os.pathmodule.
rstrip('/')serait plus simple, mais je me suis vite rendu compte que je devais l'utiliserrstrip(os.path.sep), donc évidemment l'utilisation denormpathest justifiée.