2013-06-12 5 views
51

Я видел это решение, но не специально для Python.Python - путь к папке извлечения из пути к файлу

Я хотел бы получить только путь к папке из полного пути к файлу.

Например T:\Data\DBDesign\DBDesign_93_v141b.mdb и я хотел бы получить только T:\Data\DBDesign (за исключением \DBDesign_93_v141b.mdb).

Я пытался что-то вроде этого:

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

, но это дало мне результат:

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

, который не является результатом, что я требую (будучи T:\Data\DBDesign).

Любые идеи о том, как я могу получить путь к файлу?

Спасибо.

ответ

71

Вы были рядом с вами с использованием функции split. Вам просто нужно было присоединиться к строкам, как следует.

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

Хотя, я бы рекомендовал использовать функцию os.path.dirname, чтобы сделать это, нужно просто передать строку, и он будет делать работу за вас. Поскольку, похоже, вы работаете в окнах, подумайте об использовании функции abspath. Пример -

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

Если вы хотите как имя файла и путь к директории после того, как раскол, вы можете использовать функцию os.path.split, которая возвращает кортеж, следующим образом.

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

Brilliant, большое спасибо за вашу помощь здесь. Это было очень информативно. Я буду использовать опцию abspath. – Genspec

16

Встроенный подмодуль os.path имеет функцию для этой самой задачи.

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

Используйте os.path модуль:

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

Вы можете пойти дальше и предположить, что, если вам нужно делать какие-то манипуляции имен файлов это уже реализовано в os.path. В противном случае вам, вероятно, понадобится использовать этот модуль в качестве строительного блока.

UPDATE

Следует рассмотреть вопрос об использовании pathlib для нового развития. Он находится в stdlib для Python3.4, но available on PyPI для более ранних версий. Эта библиотека предоставляет более объектно-ориентированный метод управления путями <opinion> и гораздо проще читать и программировать с помощью </opinion>.

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

Вот код:

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