Bagaimana cara mengekstrak jalur folder dari jalur file dengan Python?

116

Saya hanya ingin mendapatkan jalur folder dari jalur lengkap ke file.

Misalnya T:\Data\DBDesign\DBDesign_93_v141b.mdbdan saya ingin mendapatkan hanya T:\Data\DBDesign(tidak termasuk \DBDesign_93_v141b.mdb).

Saya telah mencoba sesuatu seperti ini:

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

tetapi itu memberi saya hasil seperti ini:

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

yang bukan hasil yang saya butuhkan (menjadi T:\Data\DBDesign).

Adakah ide tentang bagaimana saya bisa mendapatkan jalur ke file saya?

Genspec
sumber

Jawaban:

140

Anda hampir sampai di sana dengan penggunaan splitfungsi tersebut. Anda hanya perlu menggabungkan string, seperti berikut.

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

Meskipun, saya akan merekomendasikan menggunakan os.path.dirnamefungsi untuk melakukan ini, Anda hanya perlu meneruskan string, dan itu akan bekerja untuk Anda. Karena, Anda tampaknya menggunakan windows, pertimbangkan untuk menggunakan abspathfungsi tersebut juga. Sebuah contoh:

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

Jika Anda menginginkan nama file dan jalur direktori setelah dipisahkan, Anda dapat menggunakan os.path.splitfungsi yang mengembalikan tupel, sebagai berikut.

>>> import os
>>> os.path.split(os.path.abspath(existGDBPath))
('T:\\Data\\DBDesign', 'DBDesign_93_v141b.mdb')
Sukrit Kalra
sumber
os.sep.join(existGDBPath.split(os.sep)[:-1]terlihat lebih cantik.
Dave Babbitt
88

DENGAN MODUL PATHLIB (JAWABAN DIPERBARUI)

Seseorang harus mempertimbangkan menggunakan pathlib untuk pengembangan baru. Ini ada di stdlib untuk Python3.4, tetapi tersedia di PyPI untuk versi sebelumnya. Pustaka ini menyediakan metode yang lebih berorientasi objek untuk memanipulasi jalur <opinion>dan lebih mudah dibaca dan diprogram dengan </opinion>.

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

DENGAN MODUL OS

Gunakan modul os.path :

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

Anda dapat melanjutkan dan berasumsi bahwa jika Anda perlu melakukan semacam manipulasi nama file, itu sudah diterapkan os.path. Jika tidak, Anda mungkin masih perlu menggunakan modul ini sebagai blok penyusun.

SethMMorton
sumber
Path().parentapa yang saya cari!
iedmrc
44

Submodul os.path bawaan memiliki fungsi untuk tugas itu.

import os
os.path.dirname('T:\Data\DBDesign\DBDesign_93_v141b.mdb')
Dan Allan
sumber
4

Ini kodenya:

import os
existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
wkspFldr = os.path.dirname(existGDBPath)
print wkspFldr # T:\Data\DBDesign
Victor Lellis
sumber
0

Ini adalah alat bantu utilitas kecil saya untuk membagi jalur file int, token jalur:

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

Siapa pun yang mencoba melakukan ini di antarmuka kalkulator bidang Tabel GIS ESRI dapat melakukan ini dengan parser Python :

PathToContainingFolder =

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

yang seperti itu

\ Users \ me \ Desktop \ New folder \ file.txt

menjadi

\ Users \ me \ Desktop \ New folder

Ritsleting1365
sumber