mirror of
https://github.com/LC044/WeChatMsg
synced 2025-04-08 05:28:03 +08:00
52 lines
2.1 KiB
Python
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)
|