Я пытался извлечь из txt файла постоянные шаблоны "beginPattern" и "endPattern", между которыми только значения ключа в строке1 и строке2 являются индексом, тогда значения для извлеченного gettting можно найти в любой строке (key = value;)
[BEGIN_PATTERN]
line1=abd;
line2=ZXY;
...
line43=454;
...
...
[END_PATTERN]
[BEGIN_PATTERN]
line1=abc;
line2=ZXC;
...
line72=847;
...
[END_PATTERN]
[BEGIN_PATTERN]
line1=abe;
line2=ZXV;
...
line33=135;
...
[END_PATTERN]
[BEGIN_PATTERN]
line1=abt;
line2=ZXF;
...
line54=734;
...
[END_PATTERN]
ожидаемый результат:
abd,ZXY,aaa,454,ggg,ggs
abc,ZXC,mgf,847,jde,g3e
abe,ZXV,ytd,135,dfs,jhf
abt,ZXF,ytf,734,ytd,hge
Я пытался с помощью скрипта Python и re.match
, он только читает и записывает в выходной файл значение abd,ZXY
в первый beginPattern и endPattern найден
import re
START_PATTERN = '<BEGIN'
END_PATTERN = '<BEND'
with open('DB_example.txt') as file:
match = False
newfile = None
for line in file:
if re.match(START_PATTERN, line):
match = True
newfile = open('my_new_file.txt', 'w')
continue
elif re.match(END_PATTERN, line):
match = False
newfile.close()
continue
elif match:
#remove TAB and BreakLine
valor=line.rstrip().replace('\t','')
#split Key and value
(key, val) = valor.split('=')
if re.match('line1',key):
match = True
#before write into file remove ";"
newfile.write(val.replace(';',''))
continue
elif re.match('line2',key):
match:False
newfile.write(','+val.replace(';', ''))
continue
elif re.match('lineXX',key):
match:False
newfile.write(','+val.replace(';', ''))
continue
elif re.match('lineYY',key):
match:False
newfile.write(','+val.replace(';', ''))
continue
не продолжается со вторым, третьим и последующими паттернами. мои файлы имеют по крайней мере 300 000 совпадений.
Я ценю вашу помощь.