Как разбить файл .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 данное решение сначала парсит входной файл на кортежи, состоящие из трех частей - (время сообщения, автор, сообщение). После этого мы группируем список кортежей по автору и, наконец, сохраняем все данные относящиеся к одному автору в отдельный файл.

→ Ссылка