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.