feat(export): 支持 CSV 计划导出和稳定导出索引 (#114)

两个核心增强:

1. **CSV 计划导出工作流** (`--write-plan-csv` / `--from-plan-csv`)
   - 支持 blacklist (export=0 跳过) / whitelist (export=1 导出) 两种模式
   - `--size-mode estimate|scan` 控制是否扫本地附件
   - UTF-8 BOM 编码, Excel/WPS 直接打开
   - 解决了之前"动不动全量导出"的痛点

2. **`_export_index.json` 稳定导出索引**
   - 用 username 追踪当前 JSON 文件
   - 联系人备注/群名变化时自动重命名旧文件 (而不是产生孤儿)
   - 同名联系人冲突时自动追加 `__<username>` 后缀
   - atomic write (tmp + os.replace), bootstrap from existing files

3. **JSON metadata 扩展**
   - 新增 `date_first_msg / date_last_msg / contact_remark / contact_nick_name / contact_tags / contact_memo`

测试: 717 行, 20 tests pass, 覆盖 CRUD 索引、黑白名单、命名冲突、incremental rename、UTF-8 BOM。
This commit is contained in:
phoenixray2000
2026-05-19 02:20:30 +08:00
committed by GitHub
parent 4a29841ec1
commit 728dbb72df
8 changed files with 1885 additions and 56 deletions

View File

@@ -218,10 +218,23 @@ py -m pip install --user -r requirements.txt
| 解密全部数据库 | `python decrypt_db.py` |
| 启动 Web UI实时消息 | `python main.py` |
| 批量导出聊天记录 | `python export_all_chats.py` |
| 生成导出计划 CSV黑名单默认 | `python export_all_chats.py --write-plan-csv export_plan.csv` |
| 生成导出计划 CSV白名单 | `python export_all_chats.py --write-plan-csv export_plan.csv --plan-mode whitelist` |
| 按计划 CSV 导出(黑名单,默认) | `python export_all_chats.py output_dir --from-plan-csv export_plan.csv` |
| 按计划 CSV 导出(白名单) | `python export_all_chats.py output_dir --from-plan-csv export_plan.csv --plan-mode whitelist` |
| 批量导出 + 语音转录 | `python export_all_chats.py --with-transcriptions` |
| 转录单个文件语音 | `python transcribe_chat.py input.json [output.json]` |
| 注册 MCP ServerClaude | `claude mcp add wechat -- python /path/to/mcp_server.py` |
批量导出会在输出目录自动维护 `_export_index.json`,用稳定的 `username`
追踪当前 JSON 文件。再次导出时如果联系人备注或群名变化,会先把旧文件
重命名为新的可读文件名;如果同名文件属于另一个 `username`,会追加
`__<username>` 后缀避免覆盖。
导出计划 CSV 支持两种模式:默认 `blacklist` 模式下只有 `export=0`
的行会被跳过,空值、`1` 或没有 `export` 列都会导出;`whitelist`
模式下只有明确 `export=1` 的行会导出。
### Web UI
`python main.py` 启动后打开 http://localhost:5678 查看实时消息流。
@@ -385,7 +398,7 @@ make help # 列出所有命令
| 文件 | 说明 |
|---|---|
| `export_all_chats.py` | 批量导出全部聊天为 JSON (含 `-t` 转录 / `-i` 增量 / 日期范围 / `--dry-run`) |
| `export_all_chats.py` | 批量导出全部聊天为 JSON (含 CSV 计划选择、`-t` 转录`-i` 增量日期范围`--dry-run`) |
| `export_chat.py` | 单会话 JSON 导出 (供 `export_all_chats` 调用) |
| `chat_export_helpers.py` | JSON 导出共享格式化函数 (避免漂移) |
| `export_messages.py` | CSV / HTML / JSON 三种格式导出, 图片可内联 (PR #107) |