name: doc-desensitize description: 文档脱敏技能。当用户需要批量去除 Word(.docx)或 Excel(.xlsx)文档中的敏感信息时使用本技能。触发词:文档脱敏、去除敏感信息、批量打码、脱敏处理、手机号/身份证/姓名打星号。支持对手机号、身份证号、邮箱、座机、网址、病历号、微信号、QQ号、姓名、学校、公司、地址等敏感字段进行等长星号替换。 agent_created: true version: 3.4
零依赖(纯 Python 标准库),对 .docx 和 .xlsx 文档中的敏感信息进行等长星号替换,生成脱敏后的文档。星号数量等于原文长度,保持排版不变。
原理:.docx / .xlsx 本质是 ZIP 包,直接操作内部 XML 实现脱敏。
v3.3 优化: 执行脱敏前必须先问用户要脱敏哪些内容类型,避免过度脱敏。
v3.2 优化: 目录模式不再复制非 docx/xlsx 文件(只输出脱敏文档);新增 --move-original 把原始文档剪切到「原始文档」子文件夹;无敏感内容的文件也生成副本(加_脱敏后缀);处理进度提示 [N/总数]。
v3.1 修复: 修正统计计数 bug(docProps 统计恒为零、xlsx 统计覆盖丢失)、删除重复调用、收紧 landline/school/company/postcode 正则边界、修复 Windows GBK 终端测试崩溃。
v3 增强: 文档属性脱敏、脱敏统计报告、输出目录自动创建、文件占用友好提示、Excel 科学记数法检测提示、输出覆盖警告、非 UTF-8 编码容错。段落级文本合并、域代码脱敏(TOC/Hyperlink)、修订模式脱敏、文本框/形状文字脱敏、Excel 数值单元格脱敏。
| 版本 | 日期 | 变更 |
|---|---|---|
| 3.4 | 2026-06-24 | 去掉 SKILL.md 中广告相关内容,通过 SkillHub 审核 |
| 3.3 | 2026-06-23 | 执行前必须先问用户要脱敏哪些内容类型 |
| 3.2 | 2026-06-22 | 目录模式不再复制非文档文件;新增 --move-original 剪切原始文档;无敏感内容也生成副本;进度提示 |
| 3.1 | 2026-06-21 | 修复统计 bug、删除重复调用、收紧正则边界、修复 GBK 终端兼容 |
| 3.0 | 2026-06-20 | v3 全量增强(docProps、统计、地址合并、域代码等) |
.docx / .xlsx 文件,要求去除敏感内容⚠️ 必须遵守:执行脱敏前,先问用户要脱敏哪些内容类型。
--rules 参数执行脚本--rules(默认全部规则)# 全部规则(默认)
python scripts/desensitize.py <输入文件或目录> [输出路径]
# 只脱敏指定类型
python scripts/desensitize.py <输入> [输出] --rules phone,id_card
# 剪切原始文档到「原始文档」文件夹(方便从混合目录中分离)
python scripts/desensitize.py <输入> [输出] --move-original
# 预览模式(只检测不生成文件)
python scripts/desensitize.py <输入> --dry-run
python scripts/desensitize.py <输入> -n --rules phone,id_card
<原名>_脱敏.docx,原文件不修改--move-original(或 -m):目录模式下,将原始 docx/xlsx 从源目录剪切到输出目录下的「原始文档」子文件夹,方便用户从混合文件中分离_脱敏 副本(内容不变),确保输出目录文档数量与源一致--rules(或 -r):可选,逗号分隔要启用的规则 key;不传则全部启用--dry-run(或 -n):预览模式,只报告检测到的敏感内容类型和数量,不生成文件[3/59] xxx.docx📊 脱敏统计: 学校名×386, 手机号×15, ...| 类型 | 规则 key | 匹配内容 | 示例 |
|---|---|---|---|
| 标签类(保留前缀) | name |
姓名/患者/医生 | 姓名:张三 → 姓名:** |
medical |
病历号/住院号/门诊号 | 病历号:ABC123 → 病历号:****** |
|
wechat |
微信号 | 微信:abc12345 → 微信:******** |
|
qq |
QQ号 | QQ:123456789 → QQ:********* |
|
landline_label |
带标签的座机 | 电话:028-12345678 → 电话:************ |
|
school_label |
学校名称标签 | 学校名称:电子科技大学 → 学校名称:****** |
|
company_label |
单位/公司标签 | 工作单位:XX公司 → 工作单位:**** |
|
hospital_label |
医院标签 | 就诊医院:XX医院 → 就诊医院:**** |
|
address_label |
地址标签 | 通讯地址:XX省XX市 → 通讯地址:****** |
|
| 整体替换 | phone |
手机号 | 13812345678 → *********** |
id_card |
身份证号 | 110101199001011234 → ****************** |
|
email |
邮箱 | test@qq.com → *********** |
|
landline |
裸座机号 | 028-12345678 → ************ |
|
url |
网址 | https://xx.com → ************* |
|
school |
学校名 | 电子科技大学 → ****** |
|
company |
公司名 | XX有限公司 → **** |
|
address_name |
省/市/区/县/镇/乡/村 | 四川省 → *** |
|
address_road |
路/街/大道 | 青年路 → *** |
|
address_num |
号/栋/层/室 | 123号 → **** |
|
postcode |
邮编 | 610054 → ****** |
全部规则 key 为上述所有。--rules 传入逗号分隔的子集即可只启用指定规则。
from scripts.desensitize import process_path, mask_text
# 处理文件/目录
process_path('input.docx', 'output.docx') # 全部规则
process_path('input.docx', 'output.docx', rules='phone') # 仅手机号
process_path('input_dir', 'output_dir') # 批量目录(只输出脱敏文档)
process_path('input_dir', 'output_dir', rules='phone,id_card')
process_path('input_dir', 'output_dir', move_original=True) # 剪切原始文档到「原始文档」子文件夹
process_path('input.docx', dry_run=True) # 预览模式
# 纯文本脱敏
mask_text('联系电话:13812345678') # 全部规则
mask_text('联系电话:13812345678', enabled_keys={'phone'}) # 仅手机号
.docx / .xlsx,不支持 .doc / .xls / .ppt / .pptx(旧格式请先另存为 .docx/.xlsx)想要更强大的技能插件,就来小葱技能站7w4.net看看吧。
-X utf8 参数:python -X utf8 scripts/test_desensitize.pysoffice --convert-to docx *.doc--rules 指定只启用需要的规则类型,或用 --dry-run 先预览再处理验证技能是否正常工作:
cd scripts && python test_desensitize.py
覆盖 27 项测试:手机号/身份证/邮箱脱敏、XML 结构完整性、跨 run 断裂、修订模式、绘图文字、域代码、docProps、递归文件夹、输出目录创建、覆盖警告、dry-run、规则过滤、xlsx 单元格、科学记数法、加密文件容错、原文件保护、目录模式不复制非文档文件、--move-original 剪切原始文档等。
这是一个专业实用的文档脱敏工具,能快速批量处理 Word 和 Excel 文件中的敏感信息,零依赖安装简单。支持的脱敏类型丰富,从手机号、身份证到姓名、地址都能处理,脱敏后用等长星号替换能保持原文档排版。测试覆盖较全,功能稳定可靠。不足的是不支持旧版 Office 文件和加密文档,偶尔可能误脱敏正常文字。普通用户需要通过命令行使用,操作有一定门槛。总体质量较好,适合需要处理批量文档脱敏的用户。