Самый простой способ получить определенный раздел пути к файлу

У меня есть немного сложнее, чтобы решить. У меня есть необходимость извлечь определенную часть пути к файлу. Я извлек zip-файл из временного каталога, у которого есть полный путь к файлу. По сути, я хотел бы получить разницу между полным путем к файлу и временным путем. Позвольте мне привести пример ниже:

Fullpath = c:\\users\\test\\appdata\\local\\temp\\tempDir\\common\\test.txt

TempPath = c:\\users\\test\\appdata\\local\\temp\\tempDir\\

Таким образом, мои ожидаемые результаты будут иметь следующее:

results = \\common\\test.txt

Просто ищу легкий, Pythonic способ сделать это.

3 ответа

Решение

Вы можете использовать os.path.relpath:

os.path.relpath(Fullpath, TempPath)

Или вы можете использовать сплит:

Fullpath.split(TempPath)[1]

Или вы можете использовать commonprefix с replace как:

Fullpath.replace(os.path.commonprefix([Fullpath, TempPath]),'')

Выход:

common\test.txt
results = '\\' + Fullpath.replace(TempPath, '')

Или, если вы хотите быть уверены, чтобы удалить начало строки:

import re
results = '\\' + re.sub('^%s' % TempPath, '', Fullpath)

Менее надежный способ - использовать os.path.commonprefix:

import os

Fullpath = 'c:\\users\\test\\appdata\\local\\temp\\tempDir\\common\\test.txt'
TempPath = 'c:\\users\\test\\appdata\\local\\temp\\tempDir\\'

print os.path.commonprefix([Fullpath, TempPath])
# c:\users\test\appdata\local\temp\tempDir\

Знайте, что функция ничего не знает о путях; это просто индивидуальная сделка.

Затем используйте str.partition, чтобы получить интересующую вас деталь:

>>> print Fullpath.partition(os.path.commonprefix([Fullpath, TempPath]))
('', 'c:\\users\\test\\appdata\\local\\temp\\tempDir\\', 'common\\test.txt')

Если у вас такая ситуация:

Fullpath = 'c:\\users\\test\\appdata\\local\\temp\\tempDir\\common\\test.txt'
TempPath = 'c:\\users\\test\\appdata\\local\\temp\\tempDir\\co'  

Общий префикс лучше обернуть в os.path.dirname

>>> os.path.dirname(os.path.commonprefix([Fullpath, TempPath]))
c:\users\test\appdata\local\temp\tempDir\

Но это все еще не исправляет ситуацию, подобную этой:

Fullpath = 'c:\\users\\test\\..\\test\\appdata\\local\\temp\\tempDir\\common\\test.txt'

Где вам нужно разрешить полные абсолютные имена путей перед анализом.

Другие вопросы по тегам