2013-06-12 33 views
51

Widziałem to rozwiązanie, ale nie specjalnie dla Pythona.Python - Wyodrębnij ścieżkę folderu ze ścieżki pliku

Chciałbym uzyskać tylko ścieżkę folderu od pełnej ścieżki do pliku.

Na przykład T:\Data\DBDesign\DBDesign_93_v141b.mdb i chciałbym uzyskać tylko T:\Data\DBDesign (z wyłączeniem \DBDesign_93_v141b.mdb).

Próbowałem coś takiego:

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

ale dała mi wynik takiego:

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

który nie jest wynikiem, że wymagają (będąc T:\Data\DBDesign).

Jakieś pomysły, w jaki sposób mogę uzyskać ścieżkę do mojego pliku?

Dzięki.

Odpowiedz

71

Byłeś prawie przy użyciu funkcji split. Musisz tylko dołączyć do strun, jak poniżej.

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

Mimo, polecam korzystania z funkcji os.path.dirname to zrobić, po prostu trzeba przejść ciąg, i będzie to zrobić za Ciebie. Ponieważ wydajesz się być w systemie Windows, rozważ skorzystanie z funkcji abspath. Przykładem -

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

Jeśli chcesz zarówno nazwę pliku i ścieżkę katalogu Po ułamku, można użyć funkcji os.path.split która zwraca krotki, jak następuje.

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

Brilliant, dzięki bardzo za pomoc tutaj. To było bardzo pouczające. Będę używał opcji abspath. – Genspec

16

Wbudowany submoduł os.path ma funkcję dla tego zadania.

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

pomocą modułu os.path:

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

Można śmiało założyć, że jeśli trzeba zrobić jakąś manipulację filename to już wdrożony w os.path. Jeśli nie, prawdopodobnie będziesz musiał użyć tego modułu jako elementu konstrukcyjnego.

UPDATE

Trzeba rozważyć użycie pathlib dla nowego rozwoju. Jest w standardzie dla Python3.4, ale available on PyPI dla wcześniejszych wersji. Ta biblioteka zapewnia bardziej przejrzystą metodę manipulowania ścieżkami <opinion> i jest znacznie łatwiejsza do odczytania i zaprogramowania za pomocą </opinion>.

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

Oto kod:

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