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?

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')

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.


Path().parentapa yang saya cari!
iedmrc


4

Ini kodenya:

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

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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.