Как извлечь путь к папке из пути к файлу в 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
).
Любые идеи о том, как я могу получить путь к моему файлу?
Ответы
Ответ 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\Новая папка