【问题标题】:mask the first five digits of a SSN with asterisks用星号屏蔽 SSN 的前五位数字
【发布时间】:2019-08-12 21:12:43
【问题描述】:

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

【问题讨论】:

    标签: python regex python-3.x csv


    【解决方案1】:

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

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

    虽然连续,但 SSN 似乎位于第 4 个索引处。

    专业提示:如果您谈论的是敏感数据,请务必小心处理并将它们放入 CSV 文件中!!还要使您的示例更加匿名。姓名如 Jane Doe 和 SSN 为 123-45-6789。只是很明显它是假的。

    【讨论】:

      【解决方案2】:

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

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

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

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

      注意:我会将此放在评论中,但我还不能,如果这不能完全满足您的答案,您能否添加有关如何打印输出的代码,以便我可以在需要时调整我的答案。

      【讨论】:

        【解决方案3】:

        使用正则表达式

        • \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)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-11-06
          • 2011-12-03
          • 1970-01-01
          • 1970-01-01
          • 2017-10-27
          • 2015-02-22
          • 1970-01-01
          相关资源
          最近更新 更多