使用正则表达式进行CSV清理

时间:2015-08-27 22:08:19

标签: python regex python-3.x

我对正则表达式有点新,我无法使代码正常工作。 我有一组存储在csv中的数据。其中一些可能是“脏的”,即不是我期望它们的格式。 通常,数据如下所示:123.4 unit

例如:它可以是

  • 0.4%
  • 1234.45 kcal / kg
  • 23.245 UI / kg

所以,它是:

[未知位数] +。 + [未知位数] + \ s + [单位=从a到z的字符串,它们之间带有“/”]

我的代码如下:

def parse_csv(content, delimiter = ';'):  ##We use here ";" to parse CSV because of the European way of dealing with excel-csv
  csv_data = []
  for line in content.split('\n'):
    csv_data.append( [x.strip() for x in line.split( delimiter )] ) # strips spaces also
  return csv_data


Sans_ND=parse_csv(open('Sans_ND.csv','rU',encoding="ISO-8859-1").read())
 for row in Sans_ND:
    for i in range(1,len(row)): 
        if re.search(r"\d+\.\d+\s\b[a-z]+/[a-z]+\b",item):
            continue
        else:
            print("Formating Error",row[i],"in",row[0],"Col=",i)

由于输出是整个数组,并且因为我的整个数组格式不正确,所以我很确定我想要的正则表达式翻译是平庸的。 此外,我尝试将[a-z]替换为\w,但它没有改善输出。

我该如何解决这个问题?我在这里对Regex没有什么了解?

编辑:我所说的“脏”是指例如0.4-32-0%或0.4 mg / kg的东西。

编辑:使用当前代码和@sln在评论中建议的代码,我得到了例如:

 Formating Error 0.1 % en Arachidonic acid  col 25
 Formating Error 0.07 % en Arachidonic acid col 26
 Formating Error 0.07 % en Arachidonic acid  col 27
 Formating Error 0.08 % en Arachidonic acid  col 39
 Formating Error 0.08 % en Arachidonic acid  col 40

EDIT2:有了正确答案,我得到了同样的错误。 以下是一些额外的输出:

Formatting error 350 mg/kg in Angelica root col 2
Formatting error 350 mg/kg in Angelica root  col 3
Formatting error 350 mg/kg en Angelica root col 4

EDIT3:这些是来自Sans_ND.csv的一些输入请求它的评论员(b3000)

Arachidonic acid;Arachidonic Acid;0.07 %;0.08 %;0.07 %;0.06 %
Arginine;;2.2%;2.2%;2.2%;2.2%;1.8%
Beta carotene,Beta-carotene;;1.5 mg/kg;1.5 mg/kg;0.4 mg/kg
Branched-chain amino acids,Branched-chain amino acids;;1.54 %;1.65 %;2%

例如。

这些输入不包含“脏”,例如给出脏格式的例子。

1 个答案:

答案 0 :(得分:0)

感谢sln,这是答案:

$scope.$watch