Как разбить файл .txt на два с помощью регулярных выражений?
Есть файл .txt: выгрузка диалога из WhatsApp. Как разбить его на два файла, чтобы в каждом из них остались только сообщения одного собеседника?
Пример:
[09:13, 06.10.2020] Marina: Привет, Соня! Забираю машину с ТО, не успеваю
[09:14, 06.10.2020] Соня: Привет! Принято!
и т.д.
Нужно, все сообщения от Marina в один файл, а все сообщения от Соня в другой файл.
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
я бы делал это так:
import re
from itertools import groupby
from pathlib import Path
work_dir = Path("/path/to")
input_file = r"/path/to/input_data.txt"
data = open(input_file).read()
data = sorted(re.findall(r"(\[[^\]]*\]\s*)(\w+)(.*)", data), key=lambda x: x[1])
for g,d in groupby(data, key=lambda x: x[1]):
with open(work_dir / f"msg_{g}.txt", 'w') as f:
for x in d:
print("".join(x), file=f)
PS данное решение сначала парсит входной файл на кортежи, состоящие из трех частей - (время сообщения, автор, сообщение). После этого мы группируем список кортежей по автору и, наконец, сохраняем все данные относящиеся к одному автору в отдельный файл.