Преобразование данных txt файла в словарь
Имеется txt файл со следующим содержимым:
Чемпионат: Один против дюжины. 2000 год
Дата: 00-000-2000
Тур: Тур 34
Вопрос 1: С одним советским туристом...
Ответ: За то...
Автор: Максим Поташев
Вопрос 2: В своем первоначально...
Ответ: Батарея (от battre).
Источник: СЭС
Автор: Вадим Карлинский
и т.д.
Требуется поместить в словарь только данные начинающиеся со слов "Вопрос" и "Ответ" Пример:
[
{Вопрос 1: С одним советским туристом в Марселе произошел такой случай...,
Ответ:За то, что...},
{Вопрос 1: В своем первоначально узком...,
Ответ: Батарея (от battre).},
]
Не могу понять как то сделать пробовал следующее:
quiz_dict = {}
with open(file_name, 'r', encoding="KOI8-R") as f:
for line in f:
if line.strip() == '':
continue
if line.startswith('Вопрос'):
question_number = line.split(' ')[1].strip()
quiz_dict[f"Вопрос({question_number})"] = ""
elif line.startswith('Ответ'):
quiz_dict[f"Вопрос({question_number})"] += line.split(':')[1].strip() + '\n'
print(quiz_dict)
Выходит ерунда какая-то.
Ответы (1 шт):
Автор решения: Vladyslav
→ Ссылка
Извлекает данные из файла file.txt, начиная с ключевых слов "Вопрос" и "Ответ", и сохраняет их в список словарей result.
P.S. Можете считывать файл построчно, особенно если файл слишком большой, чтобы его целиком загрузить в память
import re
# Открываем файл и читаем его
with open('file.txt', 'r', encoding='utf-8') as file:
data = file.read()
# Используем регулярные выражения для извлечения данных вопросов и ответов
matches = re.findall(r'Вопрос \d+:.*?Ответ:.*?(?:Автор:|Источник:|$)', data, re.DOTALL)
# Создаем список словарей с данными вопросов и ответов
result = []
for match in matches:
question_match = re.search(r'Вопрос \d+:(.*?)Ответ:', match, re.DOTALL)
answer_match = re.search(r'Ответ:(.*?)(?:Автор:|Источник:|$)', match, re.DOTALL)
if question_match and answer_match:
question = question_match.group(1).strip()
answer = answer_match.group(1).strip()
result.append({"Вопрос": question, "Ответ": answer})
# Выводим полученные данные
for item in result:
print(item)