Antworten:
Verwenden Sie os.path.normpathdann os.path.basename:
>>> os.path.basename(os.path.normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
Der erste entfernt alle nachgestellten Schrägstriche, der zweite gibt Ihnen den letzten Teil des Pfades. Verwenden basenamegibt nur alles nach dem letzten Schrägstrich, was in diesem Fall ist ''.
Du könntest es tun
>>> import os
>>> os.path.basename('/folderA/folderB/folderC/folderD')
UPDATE1: Dieser Ansatz funktioniert, wenn Sie ihm /folderA/folderB/folderC/folderD/xx.py geben. Dies gibt xx.py als Basisnamen an. Welches ist nicht, was Sie wollen, denke ich. Also könnten Sie dies tun -
>>> import os
>>> path = "/folderA/folderB/folderC/folderD"
>>> if os.path.isdir(path):
dirname = os.path.basename(path)
UPDATE2: Wie bereits erwähnt, nehmen Sie Änderungen vor, um dem nachgestellten '/' Rechnung zu tragen .
>>> from os.path import normpath, basename
>>> basename(normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
Mit Python 3 können Sie das pathlibModul verwenden ( pathlib.PurePathzum Beispiel):
>>> import pathlib
>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/')
>>> path.name
'folderD'
Wenn Sie den letzten Ordnernamen wünschen, in dem sich eine Datei befindet:
>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/file.py')
>>> path.parent.name
'folderD'
Hier ist mein Ansatz:
>>> 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
Ich habe nach einer Lösung gesucht, um den letzten Ordnernamen zu erhalten, in dem sich die Datei befindet. Ich habe sie nur splitzweimal verwendet, um den richtigen Teil zu erhalten. Es ist nicht die Frage, aber Google hat mich hierher gebracht.
pathname = "/folderA/folderB/folderC/folderD/filename.py"
head, tail = os.path.split(os.path.split(pathname)[0])
print(head + " " + tail)
Eine naive Lösung (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:]
Ich mag die Teile Methode des Weges für diese:
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.pathModul.
str = "/folderA/folderB/folderC/folderD/"
print str.split("/")[-2]
folderD. nichtfolderC
os.pathModul.
rstrip('/')wäre einfacher, aber dann wurde mir schnell klar, dass ich es verwenden müssterstrip(os.path.sep), daher ist die Verwendung offensichtlichnormpathgerechtfertigt.