Як я можу витягнути шлях до папки з шляху до файлу в Python?


116

Я хотів би отримати лише шлях до папки від повного шляху до файлу.

Наприклад, 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).

Будь-які ідеї щодо того, як я можу знайти шлях до мого файлу?

Відповіді:


140

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

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

Хоча я б рекомендував використовувати для цього os.path.dirnameфункцію, вам просто потрібно передати рядок, і вона зробить роботу за вас. Оскільки, здається, ви знаходитесь у вікнах, подумайте і про використання abspathфункції. Приклад:

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

Якщо ви хочете, щоб і ім’я файлу, і шлях до каталогу після розбиття, ви можете використовувати os.path.splitфункцію, яка повертає кортеж, наступним чином.

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

os.sep.join(existGDBPath.split(os.sep)[:-1]виглядає красивіше.
Дейв Баббіт

88

З МОДУЛОМ PATHLIB (ОНОВЛЕНА ВІДПОВІДЬ)

Слід розглянути можливість використання 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')

З МОДУЛЬОМ ОС

Використовуйте модуль 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. Якщо ні, то вам, ймовірно, потрібно буде використовувати цей модуль як будівельний блок.


Path().parentщо я шукав!
iedmrc

44

Вбудований підмодуль 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

0

Ось мій маленький помічник утиліти для розбиття файлів int на файл, маркери шляху:

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

0

Кожен, хто намагається зробити це в інтерфейсі калькулятора поля ESRI GIS, може це зробити за допомогою аналізатора Python :

PathToContainFolder =

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

так що

\ Користувачі \ я \ Настільний \ Нова папка \ file.txt

стає

\ Користувачі \ я \ Настільний \ Нова папка

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.