如何用星号替换SSN的前五个数字?

时间:2019-08-12 21:12:43

标签: python regex python-3.x csv

我想重写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 = ........

我不知道如何修改它。

3 个答案:

答案 0 :(得分:2)

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

pandas

尽管连续但看起来SSN位于第4个索引。

专业提示:如果您在谈论敏感数据,请格外小心,并将其放入CSV文件中!!还使您的示例更加匿名。名称类似于Jane Doe和SSN(123-45-6789)。显然,这是假的。

答案 1 :(得分:0)

如果我是您,我只需调整输出的字符串量即可。因此,我将调整打印行,使其看起来像这样:

Range("E1") = 28
Range("E1").Copy

Range("A1:A10").PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, SkipBlanks:= _
    False, Transpose:=False
Range("E1").ClearContents

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

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

注意:我会在注释中添加此内容,但我还不能,如果还不能完全满足您的答案,您是否可以添加有关如何打印输出的代码,因此我可以根据需要调整答案。

答案 2 :(得分:0)

使用正则表达式

  • \d查找所有数字
  • re.sub
    • 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)
相关问题