Подтвердить что ты не робот

Как извлечь путь к папке из пути к файлу в 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).

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

Используйте модуль 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, но доступен в 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')

Ответ 3

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

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

Ответ 4

Вот код:

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

Ответ 5

Вот мой маленький вспомогательный инструмент для разбиения путей в файле int, path tokens:

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

Ответ 6

Любой, кто пытается сделать это в интерфейсе калькулятора полей таблицы ГИС ESRI, может сделать это с помощью анализатора Python:

PathToConistingFolder =

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

так что

\ Users\me\Desktop\Новая папка \file.txt

становится

\ Users\me\Desktop\Новая папка