чтение файла блок за блоком в Python - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть файл в этом формате

MACRO L20_FDPQ_TV1T8_1
 FIXEDMASK ;
 CLASS CORE ;
 ...
 ...
END L20_FDPQ_TV1T8_1
MACRO INV_20
...
...
END INV_20

Я хочу прочитать файл как блоки, чтобы каждый MACRO до конца своего имени формировал блок в python. Я пытался использовать это

with open(file_name, "r") as f_read:
    lines = f_read.readlines()
num = 0
while num < len(lines):
    line = lines[num]
    if re.search(r"MACRO\s+", line, re.IGNORECASE):
            macro_name = line.split()[1]
            while re.search(r"\s+END\s+%s"%macro_name, line, re.IGNORECASE) is None:
                line = lines[num + 1]
                #...do something...
                num = num+1
            num +=1

как это можно сделать эффективным способом?

1 Ответ

0 голосов
/ 19 ноября 2018

Предполагая, что вы не можете вкладывать макросы, макросы всегда начинаются с «MACRO [имя]» и заканчиваются «END [имя]»:

# read the contents of the file
with open(file_name, "r") as f_read:
    lines = f_read.readlines()

current_macro_lines = []
for line in lines:
    if line.startswith("MACRO"):
        macro_name = line.split()[1]

    # if line starts with END and refers to the current macro name
    elif line.startswith("END") and line.split()[1] == macro_name:
        # here the macro is complete, 
        #put the code you want to execute when you find the end of the macro

        # then when you finish processing the lines, 
        # empty them so you can accumulate the next macro
        current_macro_lines = []

    else:
        # here you can accumulate the macro lines
        current_macro_lines.append(line)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...