os.path.basename () และ os.path.dirname () ต่างกันอย่างไร


148

อะไรคือความแตกต่างระหว่างos.path.basename()และos.path.dirname()?

ฉันค้นหาคำตอบและอ่านลิงก์บางส่วนแล้ว แต่ไม่เข้าใจ ใครช่วยอธิบายง่ายๆ

คำตอบ:


288

ฟังก์ชันทั้งสองใช้os.path.split(path)ฟังก์ชันเพื่อแยกชื่อพา ธpathออกเป็นคู่ (head, tail).

os.path.dirname(path)ฟังก์ชันส่งกลับหัวของเส้นทาง

เช่น: dirname ของ'/foo/bar/item'is '/foo/bar'.

os.path.basename(path)ฟังก์ชันส่งกลับหางของเส้นทาง

เช่น: ชื่อฐานของ'/foo/bar/item'ผลตอบแทน'item'

จาก: http://docs.python.org/2/library/os.path.html#os.path.basename


24
จำไว้ว่าถ้าคุณแทนที่itemด้วยitem/ซึ่งเป็นไดเรกทอรีแล้วผลตอบแทนos.path.split('foo/bar/item/') ('foo/bar/item', '')
jkdev

1
จะเกิดอะไรขึ้นถ้าเส้นทางเป็นไฟล์พูดว่า "foo.bar"
ZhaoGang

4
@jkdev ใช่ถ้าคุณต้องการรับชื่อไดเรกทอรีสุดท้ายในเส้นทางคุณควรใช้:os.path.basename(os.path.dirname(path))
tli2020

@ZhaoGang หากเส้นทางทั้งหมดเป็นเพียงชื่อไฟล์ดังนั้น os.path.basename (file_name) จะส่งคืนชื่อไฟล์: ที่นี่'foo.bar'และ os.path.dirname (file_name) จะส่งคืนสตริงว่าง: ''.
jkdev

6

เพื่อสรุปสิ่งที่ Breno กล่าวถึงข้างต้น

สมมติว่าคุณมีตัวแปรที่มีเส้นทางไปยังไฟล์

path = '/home/User/Desktop/myfile.py'

os.path.basename(path) ส่งคืนสตริง 'myfile.py'

และ

os.path.dirname(path)ส่งคืนสตริง'/home/User/Desktop'(โดยไม่มีเครื่องหมายทับ '/')

ฟังก์ชันเหล่านี้ใช้เมื่อคุณต้องได้รับชื่อไฟล์ / ชื่อไดเร็กทอรีที่กำหนดชื่อพา ธ แบบเต็ม

ในกรณีที่เส้นทางของไฟล์เป็นเพียงชื่อไฟล์ (เช่นแทนที่จะเป็นpath = '/home/User/Desktop/myfile.py'คุณมีmyfile.py) ให้os.path.dirname(path)ส่งคืนสตริงว่าง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.