W Pythonie Załóżmy, że mam ścieżkę tak:Jak uzyskać tylko ostatnią część ścieżki w Pythonie?
/folderA/folderB/folderC/folderD/
Jak mogę uzyskać tylko folderD
udział?
W Pythonie Załóżmy, że mam ścieżkę tak:Jak uzyskać tylko ostatnią część ścieżki w Pythonie?
/folderA/folderB/folderC/folderD/
Jak mogę uzyskać tylko folderD
udział?
Zastosowanie os.path.normpath
, następnie os.path.basename
:
>>> os.path.basename(os.path.normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
Pierwsze Odcina wszelkie końcowe ukośniki, drugi daje ostatnią część ścieżki. Użycie tylko basename
daje wszystko po ostatnim ukośniku, który w tym przypadku jest ''
.
Można zrobić
>>> import os
>>> os.path.basename('/folderA/folderB/folderC/folderD')
UPDATE1: To podejście działa w przypadku dajesz go /folderA/folderB/folderC/folderD/xx.py. Daje to xx.py jako nazwę podstawową. Co nie jest tym, czego chcesz, chyba. Więc można to zrobić -
>>> import os
>>> path = "/folderA/folderB/folderC/folderD"
>>> if os.path.isdir(path):
dirname = os.path.basename(path)
Update2: Lars wskazał, dokonywania zmian, tak aby pomieścić spływu '/'.
>>> from os.path import normpath, basename
>>> basename(normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
W Pythonie myśleć, os.path.basename ("... /") poprawnie daje ''. Tak, ja też uważam to za nieoptymalne. The ... basename (... normpath ... rozwiązanie poniżej jest kanoniczne, chociaż ... –
@ lars tak! Właśnie zobaczyłem, że w takim przypadku znormalizuj ścieżkę najpierw, zanim podasz ją do głównej nazwy. Os.path.basename (os.path .normpath ('/ folderA/folderB/folderC/folderD /')) –
UPDATE2 jest najlepszym rozwiązaniem, jakie udało mi się znaleźć do tej pory. – akki
path = "/folderA/folderB/folderC/folderD/"
last = path.split('/').pop()
Poważnie, użyj modułu 'os.path'. –
str = "/folderA/folderB/folderC/folderD/"
print str.split("/")[-2]
chce 'folderD'. nie "folderC" –
Podaje "folderD", ponieważ końcowy ukośnik powoduje, że ostatni element na liście "" – neil
Poważnie, użyj modułu 'os.path'. –
Naiwny rozwiązanie (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:]
Szukałem rozwiązania dostać ostatnią nazwa_folderu, gdzie znajduje się plik, po prostu stosować podzielone dwa razy, aby uzyskać prawo część. To nie jest pytanie, ale Google mnie przeniesiono tutaj.
pathname = "/folderA/folderB/folderC/folderD/filename.py"
head, tail = os.path.split(os.path.split(pathname)[0])
print(head + " " + tail)
Oto moje podejście:
>>> 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
Co Twoje podejście rozwiązuje inaczej/lepiej niż wyżej wymienione? – user1767754
Wygląda lepiej dla mnie, łatwiejsze do odczytania. –
Początkowo myślałem, że 'rstrip ('/')' byłoby prostsze, ale szybko zorientowałem się, że będę musiał użyć 'rstrip (os.path.sep)', więc oczywiście użycie 'normpath' jest uzasadnione. –