1. 使用上篇文章中泛化类截断方法
将姓名中第二位字转化为*:
import time # 做性能测试
import pandas as pd
import random
import xlwt # 先安装pip install
# 随机替换函数
def replace_str(str, start, end):
if len(str) >= (start + end):
return str[:start] + ''.join(random.sample('******************', end)) + str[start + end:]
else:
return str
# 打开需要加密文件
data_test = pd.read_excel('D:.../data/date_test.xlsx')
print(data_test.head())
# 在原基础上不增新列,将total_bill改为object类型。姓名已经是文本不需要改了
#data_test['card_t'] = data_test['card_t'].astype((str))
# 需要改变的列
name_t_list = data_test['name_t']
#print(len(name_t_list))
# 遍历替换 调用函数
for i in range(len(name_t_list)):
name1 = name_t_list[i]
name2 = replace_str(name1, 1, 1) # 核心,调用替换
name_t_list[i] = name2
print(data_test)
# # 导出为xls文件
# data_test.to_excel('....data/date_test_success.xlsx', index=False)
'''
晁*章
戴*
韩*飞
'''
改变一下函数使得:
只保留姓氏,名统一替换两位*:
只保留姓氏,替换*位数与原名位数保持一致:
# 随机替换函数,只保留姓氏,名统一替换两位*:
def replace_str(str):
return str[:1] + ''.join(random.sample('******************', 2))
#调用函数的地方变动
name2 = replace_str_1(name1))
'''
晁**
戴**
韩**
'''
# 随机替换函数,只保留姓氏,替换*位数与原名位数保持一致:
def replace_str_1(str,s):
return str[:1] + ''.join(random.sample('******************', s-1))
#调用函数的地方变动
name2 = replace_str_1(name1,len(name1)) # 核心,调用替换
'''
晁**
戴*
韩**
'''
2. Faker 是一个生成伪造数据的 Python 库,Faker 数据通常用于测试或用一些伪数据填充数据库。
(1)调用faker.Faker()创建并初始化一个伪造的生成器,如 :faker = Faker()
(2)使用伪造器通过访问以数据类型命名的属性来生成数据,常用属性:
补充文章链接:python第三方库Faker类方法速查_pujen_yuan的博客-CSDN博客
from faker import Faker
faker = Faker(locale='zh_CN')# 缺省值(默认)是en_US 美式英语,'zh_CN'表示中文,也可以写成 'zh',标准写法 Faker(locale='zh_CN')
#随机生成10组姓名数据 或多个数据
# for i in range(10):
# #print(faker.name() + ',' + faker.address() + ',' + faker.email() + ',' + faker.phone_number())
# print(faker.name())
#print(faker.password())
print(faker.name())
print(f'随机生成姓名: {faker.name()}')
print(f'随机生成女姓名: {faker.first_name_female()}')
print(f'随机生成男姓名: {faker.first_name_male()}')
print(f'随机生成地址+邮编: {faker.address()}')
print(f'随机生成一个国家:{faker.country()}')
print(f'{faker.ssn()}')
print(f'随机生成一个职业(工作):{faker.job()}')
print(f'随机生成一个手机号:{faker.phone_number()}')
print(f'随机生成公司名字:{faker.company()}')
print(f'随机生成完整的信用卡信息:{faker.credit_card_full().rstrip()}') # 直接使用credit_card_full() 尾部有换行
print(f'随机生成布尔值:{faker.boolean()}')
print(f'随机生成密码:{faker.password()}') # 默认生成10位随机密码,可以加int类型参数,设置密码长度,如 faker_zh.password(12) 会生成一个长度为12位的随机密码
print(f'随机生成MD5加密:{faker.md5()}')
'''
林欢
随机生成姓名: 董阳
随机生成女姓名: 小红
随机生成男姓名: 刚
随机生成地址+邮编: 广......路r座 747179
随机生成一个国家:塞浦...
..........:230109197802201419
随机生成一个职业(工作):系统测试
随机生成一个手机号:18283315429
随机生成公司名字:彩......限公司
随机生成完整的信用卡信息:VISA 13 digit
淑华 林
4575764236482 01/26
CVC: 596
随机生成布尔值:True
随机生成密码:_4TQ4woK((
随机生成MD5加密:80f526a9c678a9ce4d54d2246766707b
'''
使用faker保留原名姓氏,生成随机名,姓名总位数随机不定,更加隐私。
import time # 做性能测试
import pandas as pd
import random
import xlwt # 先安装pip install
from faker import Faker
faker = Faker(locale='zh_CN')
# 随机替换函数
def replace_str(str):
return str[:1] + ''.join(faker.first_name()) #保留姓氏,不保留可以直接使用faker.name()
# 打开需要加密文件
data_test = pd.read_excel('D://...data/date_test.xlsx')
print(data_test.head())
# 在原基础上不增新列,将total_bill改为object类型
#data_test['card_t'] = data_test['card_t'].astype((str))
# 需要改变的列
name_t_list = data_test['name_t']
#print(len(name_t_list))
# 辅助列
sex_t_list = data_test['sex_t']
# 遍历替换 调用函数
for i in range(len(name_t_list)):
name1 = name_t_list[i]
name2 = replace_str(name1) #
name_t_list[i] = name2
print(data_test)
# # 导出为xls文件
# data_test.to_excel('....data/date_test_success.xlsx', index=False)
'''
晁荣
戴桂花
韩婷
'''
3. 使用编号:将姓名替换为一个编号或随机生成的字符串
# 随机替换函数
def desensitize_name(name):
# 生成六位随机数字
random_num = ''.join(random.choices('0123456789', k=6))
# 将姓名脱敏为"ID"加上六位随机数字
desensitized_name = 'ID' + random_num
return desensitized_name
#对应将调用函数部分改下
'''
ID032643
ID599868
ID725827
'''