用星号遮住SSN的前五位数字

2024-05-15 02:02:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我想重写SSN,使前五个数字替换为星号

以下是csv文件的外观:

Emp ID,Name,DOB,SSN,State
15,Samantha Lara,1993-09-08,848-80-7526,Colorado

这就是预期数据的样子:

15,Samantha,Lara,09/08/1993,***-**-7526,CO

这是迄今为止我掌握的代码,但我不确定如何屏蔽这些数字

# create a list to store the data from csv file
empl_ssn = []

reform_ssn = row["3"]
reform_ssn = ........

Tags: 文件csvnameid数字星号ssn外观
3条回答

使用正则表达式

  • \d查找所有数字
  • ^{}
    • count=5替换前5位数字
import re

new_ssn = re.sub(r'\d', '*', '123-45-6789', count=5)
print(new_ssn)

>>> '***-**-6789'

要替换csv中的所有SSN,请执行以下操作:

  • 使用熊猫
  • ^{}更新整个列
import pandas as pd

df = pd.read_csv('file.csv')

 Emp ID           Name         DOB          SSN     State
     15  Samantha Lara  1993-09-08  848-80-7526  Colorado

# Overwrite SSN
df.SSN = df.SSN.apply(lambda x: re.sub(r'\d', '*', x, count=5))

 Emp ID           Name         DOB          SSN     State
     15  Samantha Lara  1993-09-08  ***-**-7526  Colorado

# Create a new column
df['SSN_hidden'] = df.SSN.apply(lambda x: re.sub(r'\d', '*', x, count=5))

 Emp ID           Name         DOB          SSN     State   SSN_hidden
     15  Samantha Lara  1993-09-08  848-80-7526  Colorado  ***-**-7526

# Save the data
df.to_csv('file.csv', index=False)

我假设您正在遍历数据,并将该数据逐行写入所需的输出文件。如果是这种情况,那么只需将两个字符串连接在一起,将SSN拆分为最后5个字符和一个预设字符串

new_ssn = "***-**-" + row["3"].split(7)

虽然是连续的,但看起来SSN位于第四个索引

专业提示:如果你在谈论敏感数据,请非常小心地处理这些数据并将它们放入CSV文件中!!也让你的例子更加匿名。名字像Jane Doe和SSN 123-45-6789。很明显这是假的

如果我是你,我会简单地调整我输出的字符串的数量。。所以我会调整打印行,使其看起来像这样:

print("***-**-"+str(ssn[7:11]))
#That should print something like: 
***-**-1234 

您可能只需要为代码稍微调整print语句。但是,如果希望完全调整字符串,使数据不再存在,那么首先应该知道字符串在python中是不可变的。但是,我仍然会有几乎相同的解决方案:

x = "***-**-"+str(ssn[7:11])

注意:我当然会在评论中提到这一点,但我还不能,如果这不能完全满足您的答案,请您添加关于如何打印输出的代码,以便我可以根据需要调整我的答案

相关问题 更多 >

    热门问题