Я пытаюсь извлечь точки данных из текстового файла с примером строки, как показано ниже:
Feb 12 10:49:40 UTC 2020 # 1 # S0=22.97 S1=28.47 S2=29.12 S3=31.50 S4=32.57 S5=30.03 S6=24.62 S7=28.21 S8=25.41
(Очень) грязный шаблон, который я придумал, показан ниже:
import re
def parse_data(filename):
pattern = r'.*\s(\d*:\d*:\d*).*S0=(\d*\.\d*)\sS1=(\d*\.\d*)\sS2=(\d*\.\d*)\sS3=(\d*\.\d*)\sS4=(\d*\.\d*)\sS5=(\d*\.\d*)\sS6=(\d*\.\d*)\sS7=(\d*\.\d*)\sS8=(\d*\.\d*).*'
list = []
with open(filename, 'r') as read_file:
for l in read_file.readlines():
match = re.match(pattern, l)
if match:
s_list = []
for i in range(2,11):
s_list.append(match.group(i))
tuple = (match.group(1), s_list)
list.append(tuple)
return list
def main():
file1 = 'PythonTest.txt'
list1 = parse_data(file1)
if __name__ == '__main__':
main()
И это работает, однако, если количество интересных точек данных изменяется, я бы не хотел переписывать шаблон специально для этого случая. Например, если у меня есть только S0 и S1, или если у меня есть очки вплоть до S12. Но это не в моей компетенции, можно ли написать более обобщенный шаблон? И если да, то как они будут проиндексированы в группах?