Самый простой способ получить определенный раздел пути к файлу
У меня есть немного сложнее, чтобы решить. У меня есть необходимость извлечь определенную часть пути к файлу. Я извлек 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'
Где вам нужно разрешить полные абсолютные имена путей перед анализом.