文件脫敏

👤 user_4d625638 📦 v1.0.2 ⭐ 4.6 ⬇️ 321 下載
📄 辦公效率 免費

📖 技能介紹


name: doc-desensitize description: 文件脫敏技能。當用戶需要批次去除 Word(.docx)或 Excel(.xlsx)文件中的敏感資訊時使用本技能。觸發詞:文件脫敏、去除敏感資訊、批次打碼、脫敏處理、手機號/身份證/姓名打星號。支援對手機號、身份證號、郵箱、座機、網址、病歷號、微訊號、QQ號、姓名、學校、公司、地址等敏感欄位進行等長星號替換。 agent_created: true version: 3.4


文件脫敏技能(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 數值單元格脫敏。

更多技能請訪問小蔥技能站7w4.net。

更新日誌

版本 日期 變更
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:123456789QQ:*********
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 剪下原始文件等。

🤖 AI 評測

這是一個專業實用的文件脫敏工具,能快速批次處理 Word 和 Excel 檔案中的敏感資訊,零依賴安裝簡單。支援的脫敏型別豐富,從手機號、身份證到姓名、地址都能處理,脫敏後用等長星號替換能保持原文件排版。測試覆蓋較全,功能穩定可靠。不足的是不支援舊版 Office 檔案和加密文件,偶爾可能誤脫敏正常文字。普通使用者需要通過命令列使用,操作有一定門檻。總體質量較好,適合需要處理批次文件脫敏的使用者。

📊 多維度評分

適應性4.9
規範性4.3
有效性4.6
可靠性4.4
可信度5

📁 包含檔案 (3 個)

📄 SKILL.md 8.8 KB
📄 scripts/desensitize.py 36.9 KB
📄 scripts/test_desensitize.py 29.4 KB