Сократить время обработки для re.sub () во вложенном цикле - PullRequest
0 голосов
/ 19 апреля 2019

Я выполняю предварительную обработку набора файлов, в котором один файл включен в другой файл с тегом включения, как показано ниже:

файл 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 рекурсивно вызываются друг в друга, чтобы заменить все теги включения в каждом файле.Логика работает отлично.Но это займет немного много времени, чтобы выполнить.Есть ли лучший способ сделать то же самое с меньшим временем выполнения?

...