Я выполняю предварительную обработку набора файлов, в котором один файл включен в другой файл с тегом включения, как показано ниже:
файл A
include file B
include file C
contents of file A
include file D
contents of file A
Здесь мне нужно заменить включениетеги с содержимым каждого из соответствующих файлов.Так же, как то, что делает компилятор.У меня есть две функции для этого
def parseContent(self, rdbFilePath, content):
finalContent = self.removeComments(content)
includeFileSearch = re.compile(r'(?P<tag>(\s)*include+(\s*)\"(\s*)(?P<file>[a-zA-Z0-9\.\_/]*)\")')
for includes in includeFileSearch.finditer(finalContent):
finalContent = re.sub(includes.group('tag'),self.parseIncludes(rdbFilePath, includes.group('file')), finalContent)
return finalContent
def parseIncludes(self, rdbFilePath, file):
path = rdbFilePath + "/" + file
f = open(path)
pathDir = os.path.dirname(path)
includedFileContent = self.parseContent(pathDir, f.read())
return includedFileContent
Как видите, функции parseContent
и parseIncludes
рекурсивно вызываются друг в друга, чтобы заменить все теги включения в каждом файле.Логика работает отлично.Но это займет немного много времени, чтобы выполнить.Есть ли лучший способ сделать то же самое с меньшим временем выполнения?