ฉันจะแยกเส้นทางโฟลเดอร์จากเส้นทางไฟล์ใน Python ได้อย่างไร


118

ฉันต้องการเพียงแค่เส้นทางโฟลเดอร์จากเส้นทางแบบเต็มไปยังไฟล์

ตัวอย่างเช่นT:\Data\DBDesign\DBDesign_93_v141b.mdbและฉันต้องการรับเพียงT:\Data\DBDesign(ไม่รวม\DBDesign_93_v141b.mdb)

ฉันได้ลองสิ่งนี้แล้ว:

existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
wkspFldr = str(existGDBPath.split('\\')[0:-1])
print wkspFldr 

แต่มันทำให้ฉันได้ผลลัพธ์เช่นนี้:

['T:', 'Data', 'DBDesign']

ซึ่งไม่ใช่ผลลัพธ์ที่ฉันต้องการ (เป็นT:\Data\DBDesign)

มีแนวคิดเกี่ยวกับวิธีรับเส้นทางไปยังไฟล์ของฉันหรือไม่

คำตอบ:


142

คุณเกือบจะอยู่ที่นั่นด้วยการใช้splitฟังก์ชันนี้ คุณเพียงแค่ต้องเข้าร่วมสตริงดังต่อไปนี้

>>> import os
>>> '\\'.join(existGDBPath.split('\\')[0:-1])
'T:\\Data\\DBDesign'

แม้ว่าฉันจะแนะนำให้ใช้os.path.dirnameฟังก์ชันนี้คุณเพียงแค่ต้องส่งสตริงและมันจะทำงานให้คุณ เนื่องจากดูเหมือนว่าคุณจะใช้งาน windows อยู่ลองใช้abspathฟังก์ชันนี้ด้วย ตัวอย่าง:

>>> import os
>>> os.path.dirname(os.path.abspath(existGDBPath))
'T:\\Data\\DBDesign'

หากคุณต้องการทั้งชื่อไฟล์และพา ธ ไดเร็กทอรีหลังจากแยกคุณสามารถใช้os.path.splitฟังก์ชันที่ส่งคืนทูเพิลดังต่อไปนี้

>>> import os
>>> os.path.split(os.path.abspath(existGDBPath))
('T:\\Data\\DBDesign', 'DBDesign_93_v141b.mdb')

os.sep.join(existGDBPath.split(os.sep)[:-1]ดูสวยขึ้น
Dave Babbitt

88

พร้อมโมดูล PATHLIB (คำตอบที่อัปเดต)

ควรพิจารณาใช้pathlibสำหรับการพัฒนาใหม่ อยู่ใน stdlib สำหรับ Python3.4 แต่พร้อมใช้งานบน PyPIสำหรับเวอร์ชันก่อนหน้า ห้องสมุดนี้มีวิธีการที่วัตถุ orented มากขึ้นในการจัดการเส้นทางและเป็นที่อ่านง่ายขึ้นและโปรแกรม<opinion></opinion>

>>> import pathlib
>>> existGDBPath = pathlib.Path(r'T:\Data\DBDesign\DBDesign_93_v141b.mdb')
>>> wkspFldr = existGDBPath.parent
>>> print wkspFldr
Path('T:\Data\DBDesign')

ด้วย OS MODULE

ใช้โมดูลos.path :

>>> import os
>>> existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
>>> wkspFldr = os.path.dirname(existGDBPath)
>>> print wkspFldr 
'T:\Data\DBDesign'

คุณสามารถดำเนินการต่อและสมมติว่าหากคุณต้องการจัดการชื่อไฟล์บางประเภทจะมีการนำไปใช้os.pathแล้ว ถ้าไม่เช่นนั้นคุณอาจต้องใช้โมดูลนี้เป็นส่วนประกอบพื้นฐาน


Path().parentสิ่งที่ฉันกำลังมองหา!
iedmrc



0

นี่คือผู้ช่วยยูทิลิตี้ตัวน้อยของฉันสำหรับการแยกไฟล์ int เส้นทางโทเค็นเส้นทาง:

import os    
# usage: file, path = splitPath(s)
def splitPath(s):
    f = os.path.basename(s)
    p = s[:-(len(f))-1]
    return f, p

0

ใครก็ตามที่พยายามทำสิ่งนี้ในอินเทอร์เฟซเครื่องคิดเลขฟิลด์ ESRI GIS Table สามารถทำได้ด้วยตัวแยกวิเคราะห์ Python :

PathToContainingFolder =

"\\".join(!FullFilePathWithFileName!.split("\\")[0:-1])

ดังนั้น

\ Users \ me \ Desktop \ New โฟลเดอร์ \ file.txt

กลายเป็น

\ Users \ me \ Desktop \ New โฟลเดอร์

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