Если вы используете Python 3.4+, или готовы установить backport, рассмотреть вопрос об использовании pathlib
вместо os.path
:
path = pathlib.Path(old_path)
index = p.parts.index('ghi')
new_path = pathlib.Path('/jkl/mno').joinpath(*p.parts[index:])
Если вы просто хотите придерживаться 2.7 или 3.3 stdlib, нет direct способ сделать это, но вы можете получить эквивалент parts
, перейдя по ссылке os.path.split
. Например, сохраняя каждый компонент пути до тех пор, пока вы не найдете первый ghi
, а затем вставьте новый префикс, замените все до последнего ghi
(если вы хотите заменить все до сначалаghi
, это не сложно изменить) :
path = old_path
new_path = ''
while True:
path, base = os.path.split(path)
new_path = os.path.join(base, new_path)
if base == 'ghi':
break
new_path = os.path.join('/jkl/mno', new_path)
Это немного неуклюжим, так что вы можете рассмотреть вопрос о написании простую функцию, которая дает вам список или кортеж из компонентов пути, так что вы можете просто использовать find
, а затем присоединиться все это вместе, как с версией pathlib
.
спасибо за downvote, высоко оценили –