钉钉内容抽取

把钉钉里那些「明明进过我电脑、事后却找不回来」的内容——导出的聊天记录、群文件清单、下载下来的文档——变成一张能筛能搜能统计能导出的表。命令行版跑在你本机,网页版就在这一页。

命令行工具 + 网页解析台 零第三方依赖 只读,绝不写钉钉目录 网页版全程在浏览器内,不上传
网页版不连钉钉,也不该连。 访客手上没有钉钉凭证;而把作者的凭证放到公网上,等于把凭证送人——任何「登录一下就帮你读钉钉」的网页工具, 你都该先问一句它拿谁的账号在读。所以这一页做的是「你把导出文件拖进来,它在你自己的浏览器里解析」: 文件不离开你的电脑,没有上传、没有后端、没有账号。关掉页面就什么都不剩。
另一条边界,省得你白试:钉钉的完整聊天记录抽不出来。 客户端主库是整库加密的(SQLCipher 一类),首 16 字节不是 SQLite format 3 而是随机密文; 一个 67 MB 的库里能打印出来的字符串有 48 万条,含中文的是 0 条——不是「换了个格式」,是每个字节都被加密了, 密钥在登录态/钥匙串/服务端,不在本地文件里。附带的全文索引库、同步缓存库、各类 storage 库同样加密。 所以这个工具做的是把加密之外那几条明文缝隙用干净,不是破解。 要完整记录,只有一条合规路:在钉钉 App 里用它自带的「导出聊天记录」导出,再交给下面这个解析台,或用命令行版 ingest 灌进库里。

它替你解决什么

你遇到的情况它怎么解
导出来的聊天记录是一坨 txt,几千行,想找「谁在哪天说了改到第几版」,只能靠肉眼往下翻。 解析成 时间 / 发言人 / 内容 三列的表,按发言人勾选、按关键词搜、按日期卡范围,三个条件叠着用,命中处高亮。
想知道这个群到底是谁在说话——是三个人在推进,还是二十个人在刷屏。 按当前筛选条件实时统计每人发言条数、占比、首末发言时间,并画一张条形图
要把某段讨论截图发给别人/贴进汇报,但截图里全是同事真名。 一个匿名化开关:张三→A、李四→B,表格、图表、导出 CSV 三处同时换掉,映射关系只留在你自己屏幕上。
筛出来这 40 条要交给别人继续处理。 一键导出筛选后的 CSV(带 BOM,Excel/WPS 直接打开不乱码),或复制到剪贴板。

解析台:把导出文件变成一张表

下面是真能用的工具,不是截图。没有文件也可以点「用示例数据看看」——那是一份编出来的假聊天记录,人名与内容都是合成的。

第一步 · 把内容放进来

把钉钉导出的 .txt / 群文件清单 .csv / 任意 .log .md 文本拖到这里
或点这里选文件 · 文件只在本页解析,不会被上传
当前没有数据。

第二步 · 筛

发言人
还没有数据。

第三步 · 看统计

发言人条数占比首次发言最后发言

条形图是纯 SVG 现画的,跟着筛选条件实时变;最多画发言量前 12 名。

第四步 · 看明细 / 导出

时间发言人内容

它认得哪些格式

解析器先猜格式再解析,猜错了也不会丢内容——最差情况退化成「一行一条」,时间与发言人留空,正文一个字不少。

喂进去长这样怎么解
2026-08-03 09:12:04 张工
今天下午三点对图。
钉钉导出的常见样式:时间与发言人一行,正文在后续行。正文可以跨多行,一直吃到下一个时间戳为止。
[2026-08-03 09:12] 张工: 今天下午三点对图。 时间、发言人、正文挤在一行。冒号(中英文都认)左边当发言人——但只在冒号出现在前 30 字以内时才这么判,避免把正文里的冒号当成分隔符。
张工 2026-08-03 09:12:04 发言人在前、时间在后的样式同样认,正文取后续行。
时间,发言人,内容 开头的 CSV
群文件清单也是这一类
真正的 CSV 解析(认引号、认字段内换行、认双写转义)。表头按同义词认列:时间/日期/上传时间…;发言人/发送人/上传人/成员…;内容/正文/消息/文件名…。认不出表头就按位置取前三列,并在摘要里标出来。
其它任意文本 一行一条,正文原样保留。宁可少解析,也不猜错——猜错的发言人比没有发言人更坏。

命令行版:本机那一半

网页版解析导出文件;命令行版还能多做一件网页做不到的事——读你本机上钉钉留下的明文缝隙。一个 Python 文件,只用标准库,没有配置文件、没有守护进程、没有账号。

命令做什么
extract.py build 抽系统通知中心里钉钉弹过的通知(明文:发送人、正文、送达时间)+ 扫媒体缓存,增量写进 SQLite,打印「新增 N / 累计 M」。
extract.py query 管网 中文子串检索,按时间排序输出 [时间] 发送人: 正文。通知与导入的聊天记录一起搜。
extract.py today 只列今天入库的通知;没有就明说今天没有,不给空表让你猜。
extract.py collect 管网 --dest <目录> 下载目录里文件名含关键词的文件,按各自修改日期分到 <目录>/<日期>/按内容哈希去重,同名不同内容的两份都保住。
extract.py ingest 聊天记录.txt 把 App 导出的聊天记录灌进同一张表、同一套检索。

两处值得说的设计决定

检索用子串扫描,不用全文索引。全文索引的默认分词器按 ASCII 规则切词,一整段中文会被切成一个词——除非关键词恰好等于整段,否则一条也匹配不上。而在几百到几千条的量级上,逐条扫描的开销可以忽略。所以这里刻意不用全文索引查中文。上面解析台的关键词框走的也是同一套子串规则。

归集去重按内容哈希,不按目标路径。源文件的修改时间会被同步工具、整理脚本这类外部进程改写,同一个文件两次运行会被算到两个不同的日期目录去,用路径判重就会重复收一份。改成「同一份内容在同一归集根下只收一次」之后,这个问题从结构上消失了。这是踩过之后改的,不是设计时想到的。

抽得到什么,抽不到什么

这张表是实测结论,不是设想。请对着它决定要不要用:

数据源抽出来是什么局限
App 自带「导出聊天记录」的 txt
网页版能吃的就是它
完整聊天记录 时间 / 发言人 / 正文三列结构化 需要你在 App 里手动点导出。这是拿到完整记录的唯一合规路径
群文件清单 CSV 完整可读 文件名、上传人、上传时间,与聊天走同一套筛选统计 只有清单,没有文件本体
系统通知中心库(命令行版) 明文含文字 钉钉弹过系统通知的消息:发送人/群名、正文、送达时间 只有真的弹过通知才有。前台正在看的会话、你自己发的、设了免打扰的群、被清理掉的通知,都不入库
钉钉媒体缓存目录(命令行版) 只有文件,没有上下文 图片/语音/视频本体,登记路径、大小、修改时间 拿不到「谁在哪个会话发的」——那部分在加密库里。文件名是内容寻址串,只能用修改时间近似收发时间
主聊天库 / 全文索引 / 同步缓存 / 各 storage 库 拿不到 整库加密 已实测四轮全灭,含 UI 无障碍读取也刮不到。别再花时间找「哪张表存聊天」

适合谁

本页所有示例数据(示例聊天记录里的人名、群名、编号、日期与全部正文)均为合成,与任何真实人员或项目无关。 页面纯静态、无后端、不联网:你拖进来或粘贴的文件只在你自己的浏览器里解析,不上传、不落盘、关掉即消失;匿名化映射同样只存在于本页内存中。 真实系统是本机命令行工具,只读运行、绝不写钉钉目录,抽出的数据落在你自己的磁盘上;它没有、也不打算有在线版。