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 basename
donne 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 pathlib
module ( 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'
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 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:]
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.path
module.
str = "/folderA/folderB/folderC/folderD/"
print str.split("/")[-2]
folderD
. pasfolderC
os.path
module.
rstrip('/')
serait plus simple, mais je me suis vite rendu compte que je devais l'utiliserrstrip(os.path.sep)
, donc évidemment l'utilisation denormpath
est justifiée.