Klasör yolunu Python'da dosya yolundan nasıl çıkarabilirim?


116

Tam yoldan bir dosyaya giden sadece klasör yolunu almak istiyorum.

Örneğin T:\Data\DBDesign\DBDesign_93_v141b.mdbve sadece almak istiyorum T:\Data\DBDesign(hariç \DBDesign_93_v141b.mdb).

Bunun gibi bir şey denedim:

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

ama bana şöyle bir sonuç verdi:

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

bu ihtiyacım olan sonuç değil T:\Data\DBDesign.

Dosyama giden yolu nasıl bulabileceğime dair bir fikriniz var mı?

Yanıtlar:


140

splitFonksiyonu kullandığınızda neredeyse oradaydınız . Sadece aşağıdaki gibi dizelere katılmanız gerekiyordu.

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

Bununla birlikte, bunu os.path.dirnameyapmak için işlevi kullanmanızı öneririm , sadece dizeyi iletmeniz gerekir ve bu sizin için çalışacaktır. Pencerelerde göründüğünüz için, abspathişlevi de kullanmayı düşünün . Bir örnek:

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

Bölündükten sonra hem dosya adını hem de dizin yolunu istiyorsanız, os.path.splitaşağıdaki gibi bir demet döndüren işlevi kullanabilirsiniz .

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

os.sep.join(existGDBPath.split(os.sep)[:-1]daha güzel görünüyor.
— Dave Babbitt

88

PATHLIB MODÜLÜ İLE (GÜNCEL CEVAP)

Yeni geliştirme için pathlib kullanmayı düşünmek gerekir . Python3.4 için stdlib içindedir, ancak önceki sürümler için PyPI'de mevcuttur . Bu kütüphane, yolları işlemek için daha nesneye dayalı bir yöntem sağlar <opinion>ve çok daha kolay okunur ve programlanır </opinion>.

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

OS MODÜLÜ İLE

Os.path modülünü kullanın :

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

Devam edebilir ve bir tür dosya adı değişikliği yapmanız gerekiyorsa, bunun zaten uygulandığını varsayabilirsiniz os.path. Değilse, muhtemelen bu modülü yapı taşı olarak kullanmanız gerekecektir.


Path().parentne arıyordum!
— iedmrc

44

Yerleşik alt modül os.path , tam da bu görev için bir işleve sahiptir.

import os
os.path.dirname('T:\Data\DBDesign\DBDesign_93_v141b.mdb')

4

İşte kod:

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

0

Yolları int dosyası, yol belirteçlerini bölmek için küçük yardımcı yardımcı programım:

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

0

Bunu ESRI GIS Tablosu alan hesaplayıcı arayüzünde yapmaya çalışan herkes Python ayrıştırıcısıyla yapabilir :

PathToContainingFolder =

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

Böylece

\ Kullanıcılar \ ben \ Masaüstü \ Yeni klasör \ dosya.txt

olur

\ Kullanıcılar \ ben \ Masaüstü \ Yeni klasör

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.