使用正则表达式查找和删除数据

时间:2018-04-23 02:16:27

标签: python-3.x

需要搜索数据并删除客户社会保险号。

with open('customerdata.csv') as csvfile:
  reader = csv.DictReader(csvfile)
  for row in reader:
    data.append(row)

for row in customerdata.csv:
  results = re.search(r'\d{3}-\d{2}-\d{4}', row)
  re.replace(results, "", row)
  print(results)

脚本新手并不确定我需要做些什么来解决这个问题。

2 个答案:

答案 0 :(得分:1)

这不是正则表达式的工作。

您使用的是csv.DictReader,非常棒。这意味着您可以访问csv文件中的列名。你应该做的是记下包含SSN的列,然后在没有它的情况下写出行。这样的事情(未经测试):

with open('customerdata.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        del row['SSN']
        print(row)

如果你需要保留数据但是将其删空,那么就像:

with open('customerdata.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        row['SSN'] = ''
        print(row)

希望你能从这里拿东西;例如,您可能想要使用csv dict writer,而不是打印。取决于您的用例。虽然,坚持使用csv操作,绝对避免在这里使用正则表达式。您的数据采用csv格式。将数据视为行和列,而不是作为要复制的单个字符串。 :)

答案 1 :(得分:0)

我没有在Python 3.6.5 docs中看到re的替换函数。

我相信你想要使用的功能是re.sub

  

re.sub(pattern,repl,string,count = 0,flags = 0)

     

返回通过替换repl替换字符串中最左边非重叠模式而获得的字符串。如果找不到模式,则返回字符串不变。

这意味着您在第二个for循环中所需要的只是:

for row in customerdata.csv:
  results = re.sub(r'\d{3}-\d{2}-\d{4}', row, '')
  print(results)