问题表述

现有一个人员清单,包含姓名、学历和毕业学校等信息。现在需要对姓名进行脱敏处理,即把名字标记为*,只显示人员的姓。原表格如下:

姓名脱敏 java 姓名脱敏excel_python


希望的表格样式如下:

姓名脱敏 java 姓名脱敏excel_姓名脱敏 java_02

解决思路

  1. 把名单信息从excel文件中读出来
  2. 取出姓名那一列
  3. 保留第一个姓,其余用星号替换。替换思路为:拿到姓名字符串的第一个字符,根据字符串长度添加*
  4. 重新组成名单信息
  5. 把脱敏的数据写入到一个新的Excel表

代码实现

import pandas as pd
filename='./files/namelist.xlsx'
#读取数据
file_obj=pd.read_excel(filename)
#获取姓名那一列数据
names=file_obj.iloc[:,1]
#新建一个列表,用于存放脱敏过的姓名
masked_name=[]
for name in names:
    maskname=name[0] #获取姓名的第一个字符
    for i in range(len(name)-1):
        maskname = maskname + '*' #根据姓名长度加星号
    masked_name.append(maskname) #把脱敏的姓名依次加入到列表

#把数据的姓名列替换为脱敏的姓名列
file_obj.iloc[:,1]=masked_name
#把处理好的名单信息,写回到一个新文件中
file_obj.to_excel('./files/maskedname.xlsx',index=False)#index=False表示不在新表中添加行名

若最后一行代码不说明index=Flase,则结果多出一个行名,如下所示:

姓名脱敏 java 姓名脱敏excel_python_03