ใน Python สมมติว่าฉันมีเส้นทางเช่นนี้
/folderA/folderB/folderC/folderD/
ฉันจะได้รับเพียงfolderD
บางส่วนได้อย่างไร
ใน Python สมมติว่าฉันมีเส้นทางเช่นนี้
/folderA/folderB/folderC/folderD/
ฉันจะได้รับเพียงfolderD
บางส่วนได้อย่างไร
คำตอบ:
ใช้os.path.normpath
แล้วos.path.basename
:
>>> os.path.basename(os.path.normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
แถบแรกจะตัดเครื่องหมายสแลชใด ๆ ส่วนที่สองให้ส่วนสุดท้ายของเส้นทาง โดยใช้เพียงจะช่วยให้ทุกอย่างหลังจากเฉือนที่ผ่านมาซึ่งในกรณีนี้คือbasename
''
คุณสามารถทำได้
>>> import os
>>> os.path.basename('/folderA/folderB/folderC/folderD')
UPDATE1:วิธีการนี้ใช้งานได้ในกรณีที่คุณให้ /folderA/folderB/folderC/folderD/xx.py สิ่งนี้ให้ xx.py เป็นชื่อฐาน ซึ่งไม่ใช่สิ่งที่คุณต้องการฉันเดา ดังนั้นคุณสามารถทำสิ่งนี้ -
>>> import os
>>> path = "/folderA/folderB/folderC/folderD"
>>> if os.path.isdir(path):
dirname = os.path.basename(path)
UPDATE2:เมื่อลาร์สชี้ให้เห็นการเปลี่ยนแปลงเพื่อรองรับการติดตาม '/'
>>> from os.path import normpath, basename
>>> basename(normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
ด้วย python 3 คุณสามารถใช้pathlib
โมดูล ( pathlib.PurePath
ตัวอย่าง):
>>> import pathlib
>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/')
>>> path.name
'folderD'
หากคุณต้องการชื่อโฟลเดอร์สุดท้ายที่มีไฟล์อยู่:
>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/file.py')
>>> path.parent.name
'folderD'
นี่คือแนวทางของฉัน:
>>> 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
ฉันค้นหาวิธีแก้ไขเพื่อให้ได้ชื่อนามสกุลสุดท้ายที่ไฟล์นั้นตั้งอยู่ฉันเพิ่งใช้split
สองครั้งเพื่อให้ได้ส่วนที่ถูกต้อง มันไม่ใช่คำถาม แต่ google โอนฉันมาที่นี่
pathname = "/folderA/folderB/folderC/folderD/filename.py"
head, tail = os.path.split(os.path.split(pathname)[0])
print(head + " " + tail)
โซลูชันไร้เดียงสา (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:]
ฉันชอบวิธีส่วนของ Path สำหรับสิ่งนี้:
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
โมดูลอย่างจริงจัง
str = "/folderA/folderB/folderC/folderD/"
print str.split("/")[-2]
folderD
เขาต้องการ ไม่ใช่folderC
os.path
โมดูลอย่างจริงจัง
rstrip('/')
จะง่าย แต่แล้วรู้อย่างรวดเร็วฉันต้องใช้rstrip(os.path.sep)
เพื่อให้เห็นได้ชัดว่าการใช้งานของnormpath
เป็นธรรม