Добавить все в словарь из цикла for, который парсит

Рейтинг: 3Ответов: 2Опубликовано: 01.02.2023

Есть такой код

import re
test = ""
text = ""
with open('test.txt', 'r') as fileText:
    test = fileText.read()

for m in re.finditer('data-value=\"(.*?)\" .*\s+.*\s+.*\s+.*?\s+class=\"currSymbol\">(.*?)<', test):
    text += str(m.group(2, 1)) + "\n"
    print(m.group(2, 1))

print(text)

При выполнение кода в text, добавляются все спаршенные данные, но надо сделать из этого словарь с ключ: значение. Никак не могу понять как это сделать. При парсе выходят данные такого типа

('ZOI', '688')
('ZNE', '1231')
('ZZC', '794')
('ZRC', '600')
('ZSE', '1341')
('ZUR', '815')

Ответы

▲ 3

Можно сделать при помощи еще одного регулярного выражения, распарсить текст по кавычкам в каждой строке и создать на основании этого словарь:

import re

text = """('ZOI', '688')
('ZNE', '1231')
('ZZC', '794')
('ZRC', '600')
('ZSE', '1341')
('ZUR', '815')
"""

result = {}

for line in text.splitlines():
    line = re.search(r"'(.*)'.*'(.*)'", line)
    result[line.group(1)] = line.group(2)

print(result)

Вывод:

{'ZOI': '688', 
 'ZNE': '1231', 
 'ZZC': '794', 
 'ZRC': '600', 
 'ZSE': '1341', 
 'ZUR': '815'}
▲ 3

Так зачем делать текст, чтобы потом превращать в словарь, формируйте сразу словарь, примерно так:

d = {m.group(2): m.group(1) for m in re.finditer('ваше_регулярное_выражение', test)}