Jawaban:
Gunakan os.path.normpath
, lalu os.path.basename
:
>>> os.path.basename(os.path.normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
Strip pertama dari setiap garis miring, yang kedua memberi Anda bagian terakhir dari jalan. Menggunakan hanya basename
memberikan segalanya setelah slash terakhir, yang dalam hal ini adalah ''
.
Anda bisa melakukannya
>>> import os
>>> os.path.basename('/folderA/folderB/folderC/folderD')
UPDATE1: Pendekatan ini berfungsi jika Anda memberikan /folderA/folderB/folderC/folderD/xx.py. Ini memberikan xx.py sebagai nama dasarnya. Kurasa itu bukan yang kau inginkan. Jadi Anda bisa melakukan ini -
>>> import os
>>> path = "/folderA/folderB/folderC/folderD"
>>> if os.path.isdir(path):
dirname = os.path.basename(path)
UPDATE2: Seperti yang ditunjukkan oleh lars, lakukan perubahan untuk mengakomodasi trailing '/'.
>>> from os.path import normpath, basename
>>> basename(normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
Dengan python 3 Anda dapat menggunakan pathlib
modul ( pathlib.PurePath
misalnya):
>>> import pathlib
>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/')
>>> path.name
'folderD'
Jika Anda ingin nama folder terakhir tempat file berada:
>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/file.py')
>>> path.parent.name
'folderD'
Inilah pendekatan saya:
>>> 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
Saya sedang mencari solusi untuk mendapatkan foldername terakhir di mana file itu berada, saya hanya menggunakan split
dua kali, untuk mendapatkan bagian yang tepat. Ini bukan pertanyaannya tetapi google memindahkan saya ke sini.
pathname = "/folderA/folderB/folderC/folderD/filename.py"
head, tail = os.path.split(os.path.split(pathname)[0])
print(head + " " + tail)
Solusi naif (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:]
Saya suka metode bagian Path untuk ini:
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
. notfolderC
os.path
modul.
rstrip('/')
akan lebih sederhana tetapi kemudian dengan cepat menyadari bahwa saya harus menggunakanrstrip(os.path.sep)
, jadi jelas penggunaannormpath
dibenarkan.