Câu trả lời:
Sử dụng os.path.normpath
, sau đó os.path.basename
:
>>> os.path.basename(os.path.normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
Các dải đầu tiên loại bỏ bất kỳ dấu gạch chéo, thứ hai cung cấp cho bạn phần cuối của đường dẫn. Sử dụng chỉ basename
cung cấp cho tất cả mọi thứ sau dấu gạch chéo cuối cùng, trong trường hợp này là ''
.
Bạn có thể làm
>>> import os
>>> os.path.basename('/folderA/folderB/folderC/folderD')
CẬP NHẬT1: Cách tiếp cận này hoạt động trong trường hợp bạn cung cấp cho nó /folderA/folderB/folderC/folderD/xx.py. Điều này cung cấp cho xx.py làm tên cơ sở. Đó không phải là những gì bạn muốn tôi đoán. Vì vậy, bạn có thể làm điều này -
>>> import os
>>> path = "/folderA/folderB/folderC/folderD"
>>> if os.path.isdir(path):
dirname = os.path.basename(path)
CẬP NHẬT2: Như những người nói dối đã chỉ ra, thực hiện các thay đổi để phù hợp với dấu vết '/'.
>>> from os.path import normpath, basename
>>> basename(normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
Với python 3, bạn có thể sử dụng pathlib
mô-đun ( pathlib.PurePath
ví dụ):
>>> import pathlib
>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/')
>>> path.name
'folderD'
Nếu bạn muốn tên thư mục cuối cùng chứa tệp:
>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/file.py')
>>> path.parent.name
'folderD'
Đây là cách tiếp cận của tôi:
>>> 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
Tôi đã tìm kiếm một giải pháp để có được tên người dùng cuối cùng trong đó tập tin được đặt, tôi chỉ sử dụng split
hai lần, để có được phần đúng. Đó không phải là câu hỏi nhưng google đã chuyển tôi ở đây.
pathname = "/folderA/folderB/folderC/folderD/filename.py"
head, tail = os.path.split(os.path.split(pathname)[0])
print(head + " " + tail)
Một giải pháp ngây thơ (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:]
Tôi thích phương thức phần của Path cho việc này:
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
mô-đun.
str = "/folderA/folderB/folderC/folderD/"
print str.split("/")[-2]
folderD
. khôngfolderC
os.path
mô-đun.
rstrip('/')
sẽ đơn giản hơn nhưng sau đó nhanh chóng nhận ra mình phải sử dụngrstrip(os.path.sep)
, nên rõ ràng việc sử dụngnormpath
là hợp lý.