Antworten:
Verwenden Sie os.path.normpath
dann 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 basename
gibt 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 pathlib
Modul verwenden ( pathlib.PurePath
zum 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 split
zweimal 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.path
Modul.
str = "/folderA/folderB/folderC/folderD/"
print str.split("/")[-2]
folderD
. nichtfolderC
os.path
Modul.
rstrip('/')
wäre einfacher, aber dann wurde mir schnell klar, dass ich es verwenden müssterstrip(os.path.sep)
, daher ist die Verwendung offensichtlichnormpath
gerechtfertigt.