
影刀RPA 数据脱敏处理保护个人信息的自动化方案作者林焱一、什么情况需要数据脱敏在企业中很多部门之间传递数据时需要脱敏——市场部需要用客户数据做分析但不能看到真实手机号开发团队需要生产数据做测试但不能暴露真实身份证号外包团队处理的数据需要隐藏敏感字段。数据脱敏的需求每次都是相同的操作拿到原始数据 → 按规则替换敏感字段 → 输出脱敏后的文件。用影刀RPA可以一键完成同时保留完整的操作日志。店群矩阵自动化突破运营极限二、实战自动化数据脱敏流程Step 1定义脱敏规则在影刀中创建「数据脱敏」流程脱敏规则从配置文件读入# 脱敏规则配置可外置到Excel由数据安全负责人维护DESENSITIZE_RULES{手机号:lambdax:str(x)[:3]****str(x)[-4:]iflen(str(x))11elsex,身份证号:lambdax:str(x)[:6]********str(x)[-4:]iflen(str(x))15elsex,银行卡号:lambdax:**** **** **** str(x)[-4:]iflen(str(x))16elsex,姓名:lambdax:str(x)[0]**(len(str(x))-1),邮箱:lambdax:x.split()[0][:2]****x.split()[-1]ifinstr(x)elsex,地址:lambdax:str(x)[:6]****,}Step 2读取源文件并脱敏importpandasaspdimportosdefdesensitize_file(input_path,output_path,field_mapping): input_path: 原始文件路径 output_path: 脱敏后输出路径 field_mapping: {Excel列名: 脱敏规则名}如 {客户手机: 手机号, 真实姓名: 姓名} dfpd.read_excel(input_path)original_countlen(df)forcolumn,rule_nameinfield_mapping.items():ifcolumnnotindf.columns:print(f⚠️ 列 {column} 不存在跳过)continueifrule_namenotinDESENSITIZE_RULES:print(f⚠️ 规则 {rule_name} 未定义跳过)continuerule_funcDESENSITIZE_RULES[rule_name]df[column]df[column].apply(lambdax:rule_func(x)ifpd.notna(x)elsex)print(f✅ 列 {column} 已按 {rule_name} 规则脱敏)# 保存脱敏结果df.to_excel(output_path,indexFalse)return{原始行数:original_count,输出文件:output_path}Step 3影刀调用脱敏函数【读取Excel配置】脱敏任务清单.xlsx # 包含字段源文件路径, 输出路径, 字段映射JSON格式 对于每个脱敏任务 【Python代码块】 import json field_map json.loads(row[字段映射])  result desensitize_file(row[源文件路径], row[输出路径], field_map) 【写入日志】 任务名称 | 源文件 | 脱敏字段 | 完成时间 | 操作人三、进阶基于正则的自动识别脱敏不需要手动指定哪列是手机号自动扫描所有列识别出手机号格式就脱敏。importre PATTERN_RULES[(手机号,r^1[3-9]\d{9}$,lambdax:str(x)[:3]****str(x)[-4:]),(身份证,r^\d{17}[\dX]$,lambdax:str(x)[:6]********str(x)[-4:]),(邮箱,r^[\w.-][\w.-]\.\w$,lambdax:x.split()[0][:2]****x.split()[-1]),(银行卡,r^\d{16,19}$,lambdax:**** **** **** str(x)[-4:]),]defauto_detect_and_desensitize(df):自动检测并脱敏所有敏感列report[]forcolindf.columns:# 取前100个非空值做模式匹配sampledf[col].dropna().astype(str).head(100)forrule_name,pattern,transforminPATTERN_RULES:match_ratesample.str.match(pattern).mean()ifmatch_rate0.8:# 超过80%的值符合该模式print(f 列 {col} 识别为{rule_name}匹配率{match_rate:.0%}开始脱敏)df[col]df[col].apply(lambdax:transform(str(x))ifpd.notna(x)andre.match(pattern,str(x))elsex)report.append({列名:col,识别类型:rule_name,匹配率:f{match_rate:.0%}})breakreturndf,reporttemu店群自动化报活动案例四、踩坑记录坑1脱敏是不可逆操作原始文件一定要备份流程里强制先备份到指定目录再对副本脱敏绝不在原始文件上操作。坑2部分字段脱敏后业务失效比如邮编字段本来是6位数字被错误识别为银行卡号做脱敏。自动识别的匹配阈值要设为80%以上且提供豁免字段列表让用户排除。坑3Excel日期格式存储为数字pd.read_excel()读取日期时有时会变成44927这样的序列数。读取时要显式指定日期列的dtype避免被当成银行卡号识别。坑4脱敏日志要写清楚责任链脱敏操作要记录谁请求的、处理了哪个文件、脱敏了哪些字段、文件MD5值。这是事后审计的重要依据。适用人群数据安全专员、IT部门、合规团队难度⭐⭐基本脱敏简单自动识别稍复杂