文档脱敏

Polar Sponsor
爱发电 赞助
.NET 9.0

文档脱敏技能。当用户需要批量去除 Word(.docx)或 Excel(.xlsx)文档中的敏感信息时使用本技能。触发词:文档脱敏、去除敏感信息、批量打码、脱敏处理、手机号/身份证/姓名打星号。支持对手机号、身份证号、邮箱、座机、网址、病历号、微信号、QQ号、姓名、学校、公司、地址等敏感字段进行等长星号替换。

文档脱敏技能(doc-desensitize)

功能概述

文档脱敏技能(doc-desensitize)是一项面向实际任务的技能,主要用于零依赖(纯 Python 标准库),对 .docx 和 .xlsx 文档中的敏感信息进行 等长星号替换 ,生成脱敏后的文档;星号数量等于原文长度,保持排版不变;

核心要点

  • 原理: .docx / .xlsx 本质是 ZIP 包,直接操作内部 XML 实现脱敏;
  • v3.3 优化: 执行脱敏前必须先问用户要脱敏哪些内容类型,避免过度脱敏;
  • v3.2 优。

使用与执行

它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。

结果检查与注意事项

执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。

文档脱敏技能(doc-desensitize)

概述

零依赖(纯 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 文件,要求去除敏感内容
  • 用户提到需要对手机号、身份证、姓名等信息打码

执行流程

⚠️ 必须遵守:执行脱敏前,先问用户要脱敏哪些内容类型。

  1. 用户要求脱敏时,先列出可选规则(参考下方「脱敏规则」表格),用 AskUserQuestion 让用户勾选要脱敏的类型
  2. 用户选择后,用对应的 --rules 参数执行脚本
  3. 如果用户说"全部"或没有特别指定,则不传 --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,原文件不修改
  • 输出路径可指定任意位置,父目录不存在会自动创建
  • 输入为目录:只处理 docx/xlsx,输出目录只包含脱敏后的文档,不复制其他文件(PDF、zip、图片等留在原目录不动)
  • --move-original(或 -m):目录模式下,将原始 docx/xlsx 从源目录剪切到输出目录下的「原始文档」子文件夹,方便用户从混合文件中分离
  • 无敏感内容的 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 传入逗号分隔的子集即可只启用指定规则。

脚本 API

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)
  • 不支持加密/密码保护的文档
  • Excel 中身份证号如以数值存储(显示为科学记数法),无法脱敏,请在 Excel 中将该列设为"文本"格式后重新保存
  • 正则匹配可能有轻微过度脱敏,建议人工复核
  • 脱敏覆盖范围:正文、页眉页脚、批注、目录域代码、超链接域代码、文本框中文字、修订痕迹、文档属性(作者/公司等元数据)
  • 嵌入式文档(OLE 对象)及超大文件(>500MB)暂不支持
  • 文件被 Word/Excel 打开时无法处理,请先关闭
  • 星号数量等于原文长度(如"张三"→"","13800138000"→"*********"),保证排版不变

常见问题

  • Windows 终端乱码/崩溃:运行测试时加 -X utf8 参数:python -X utf8 scripts/test_desensitize.py
  • 文件被占用:关闭 Word/Excel 后重试;如仍失败,检查文件是否在共享目录中被其他用户打开
  • 旧格式 .doc/.xls:用 Word/Excel另存为 .docx/.xlsx,或用 LibreOffice 命令行批量转换:soffice --convert-to docx *.doc
  • 误脱敏正常文本:用 --rules 指定只启用需要的规则类型,或用 --dry-run 先预览再处理

自动化测试

验证技能是否正常工作:

cd scripts && python test_desensitize.py

覆盖 27 项测试:手机号/身份证/邮箱脱敏、XML 结构完整性、跨 run 断裂、修订模式、绘图文字、域代码、docProps、递归文件夹、输出目录创建、覆盖警告、dry-run、规则过滤、xlsx 单元格、科学记数法、加密文件容错、原文件保护、目录模式不复制非文档文件、--move-original 剪切原始文档等。

相关专题

更多
Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

0

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

0

15

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

2026.10.28

0

10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

0

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

0

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

0

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

0

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

0

25

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

2026.10.22

0

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习