WeChatMsg/exporter/exporter_ai_txt.py
2025-03-28 21:43:32 +08:00

52 lines
2.1 KiB
Python

import os
import re
from collections import defaultdict
from wxManager import Message
from exporter.exporter import ExporterBase, get_new_filename, remove_privacy_info
class AiTxtExporter(ExporterBase):
last_sender = 'wxid_00112233'
def title(self, message: Message):
sender = message.sender_id
display_name = ''
if sender != self.last_sender:
display_name = f'\n{message.display_name}:'
self.last_sender = sender
return display_name
def export(self):
# 实现导出为txt的逻辑
print(f"【开始导出 TXT {self.contact.remark}")
origin_path = self.origin_path
os.makedirs(origin_path, exist_ok=True)
filename = os.path.join(origin_path, self.contact.remark + '_chat.txt')
filename = get_new_filename(filename)
messages = self.database.get_messages(self.contact.wxid, time_range=self.time_range)
total_steps = len(messages)
# 创建一个默认字典,用于按日期分组
grouped_messages = defaultdict(list)
# 遍历消息,将其按日期分组
for index, message in enumerate(messages):
if index and index % 1000 == 0:
self.update_progress_callback(index / total_steps)
if not self.is_selected(message):
continue
date_key = message.str_time[:10] # 以日期作为键
# 将消息添加到对应日期的列表中
grouped_messages[date_key].append(f'{self.title(message)}{remove_privacy_info(message.to_text())}')
with open(filename, mode='w', newline='', encoding='utf-8') as f:
# 如果需要,可以将结果转换为普通字典
grouped_messages = dict(grouped_messages)
# 按日期排序并遍历结果
for date in sorted(grouped_messages.keys()):
msgs = grouped_messages[date]
f.write(f"\n\n{'*' * 20}{date}{'*' * 20}\n")
f.write('\n'.join(msgs))
self.update_progress_callback(1)
print(f"【完成导出 TXT {self.contact.remark}")
self.finish_callback(self.exporter_id)