Я нахожу регулярное выражение мощным, но менее читабельным, особенно если вы давно его не использовали, поэтому вот решение без него с использованием других встроенных модулей.
import os
import fnmatch
def get_episode(path):
# Split the path (should be OS independent).
path_split = os.path.normpath(path).split(os.sep)
# Find the episode using fnmatch.
# This enforces your conventions that it must follow 3 numbers after 'ep'.
episodes = fnmatch.filter(path_split, "ep[0-9][0-9][0-9]")
if not episodes:
raise RuntimeError, "Unable to detect episode in the supplied path."
# In theory the path may yield multiple episodes from it, so just return the first one.
return episodes[0]
episode = get_episode("N://out/ep001/FX/maya/file4984.ma")
# Use os.path.join to build your new path.
new_path = os.path.join(os.path.normpath("Y://"), "work", episode, "comp")
Этот пример дает такой результат:
'ep001' # эпизод
'Y: \ work \ ep001 \ comp' # new_path (Я нахожусь на Windows, поэтому я получаю двойной
обратная косая черта)
Лучше использовать os.path
методы, чтобы он работал кроссплатформенно, чем +
для построения ваших путей.
Это было проверено на Python 2.7.11