Я хотел бы проанализировать многострочный текстовый файл с содержимым как
section1:
key1 val1
key2 val2
section2:
val1
val2
val3
section3:
section4:
somevalue
Определены заголовки разделов (section1, section2, ...).Цель состоит в том, чтобы прочитать значения в различных разделах.У меня проблемы с использованием модуля pyparsing для нескольких строк (реальная проблема гораздо сложнее, чем в этом простом примере).
Когда я использую следующий код, синтаксический анализатор ожидает в каждой строкеполный список определенных ключевых слов :
# -*- coding: utf-8 -*-
from pyparsing import Literal, ZeroOrMore, LineEnd, ParseException
FileSyntax = None
def Grammar():
#section1:
section1 = Literal("section1:").suppress() + ZeroOrMore(LineEnd())
#section2:
section2 = Literal("section2:").suppress() + ZeroOrMore(LineEnd())
#section3:
section3 = Literal("section3:").suppress() + ZeroOrMore(LineEnd())
#section4:
section4 = Literal("section4:").suppress() + ZeroOrMore(LineEnd())
return section1 + section2 + section3 + section4
def parseFile(filename : str):
global FileSyntax
print("\nparse results:\n")
try:
TestFile = open(filename)
testdata = "".join( TestFile.readlines())
FileSyntax = Grammar()
FileSyntax.parseString(testdata)
except ParseException as err:
print(err.line)
print(" "*(err.column-1) + "^")
print("* " + str(err))
except Exception as e:
import traceback
traceback.print_exc(e)
parseFile("testdata.txt")
Как можно выполнить анализ с учетом состояния (зависит от различных разделов)?Спасибо.