2016-11-30 41 views
0

我有2个CSV文件。我希望列表A中的每个元素都与列表B中的每个元素进行匹配。列表A充当训练集,列表B有错误,使用编辑距离获得匹配后会得到修正。csv文件中的两列读取为单列。 python 2.7

问题是B中有两列,第一列有唯一编号,第二列有固定的字符串。

即时得到的输出为:

628227teitARMTEteke : iQIARMTEMAC 
628226iQIARMTEMAC 9 : iQIARMTEMAC 
628229iQIAConfigCH : iQIAConfigCH 
627701iQIAConfigCH : iQIAConfigCH 

,但我想我的输出是:

628227 : teitARMTEteke : iQIARMTEMAC 
628226 : iQIARMTEMAC 9 : iQIARMTEMAC 
628229 : iQIAConfigCH : iQIAConfigCH 
627701 : iQIAConfigCH : iQIAConfigCH 

CODE

import csv 
from nltk.metrics import distance 


with open("all_correct_promo.csv","rb") as file1: 
    reader1 = csv.reader(file1) 
    correctPromoList = [''.join(i) for i in reader1] 
    # print correctPromoList 
with open("all_extracted_promo3.csv","rb") as file2: 
    reader2 = csv.reader(file2) 
    extractedPromoList = [''.join(i) for i in reader2] 
    #print extractedPromoList 

incorrectPromo = {} 
count = 0 
for extracted in extractedPromoList: 
    #print 'Computing %dth promo code...' % count 
    incorrectPromo[extracted] = find_min_edit(extracted,correctPromoList) # get comma separated str of real promo codes nearest to extracted 
    count+=1 
#print incorrectPromo 


for key, value in incorrectPromo.iteritems(): 
    print key ,':', value 

眼下唯一的数字越来越阅读与弦将影响字符串得到纠正的方式。我想用它的字符串,但不影响该字符串得到与来自all_correct_promo.csv

all_extracted_promo3.csv

628229 iQIABundUPGR 
628229 iQIAPortUPGR 
628229 iQIAConfigCH 
628229 iQIARMTEMAC 9 

样品

样本名单A.字符串匹配的方式来显示的数字

iQ BundleUPGR 
IQ MANAGED 
IQ04 BRP 
IQ1MOBILSUP 
IQ2MOBILSUP 
iQBundIeUPGR 
iQBundle 1 
iQBundle 2 
+0

什么是列表A? –

+0

all_correct_promo.csv - 将列表A – safwan

+0

我有点困惑。带有数字的字符串,它来自'all_correct_promo.csv',你想对没有数字的字符串进行距离计算? –

回答

1

撇开一种奇怪的获取数据的方式 - 至少可以说 - 您使用的是,我会严格回答约csv.reader

要区分列,您需要根据您的.csv设置其dialect。如its docs所述,它接受所有个人dialect formatting parameters作为关键字参数。在这里,你在delimeter可能感兴趣的:

csv.reader(<file>,delimeter=<whatever>) 

来看由摘录,你all_extracted_promo3.csv有两个空格分隔符,和all_correct_promo.csv使用一个单一的空间。 csv.Reader only supports single-character delimiters though

>>> [i for i in csv.reader(open("all_extracted_promo3.csv","rb"),delimiter=' ')] 
[['628229', '', 'iQIABundUPGR'], 
['628229', '', 'iQIAPortUPGR'], 
['628229', '', 'iQIAConfigCH'], 
['628229', '', 'iQIARMTEMAC', '9']] 

所以你必须要么围绕得到(通过忽略第二个元素),更改生产文件的软件 - 例如使用标准逗号作为分隔符 - 或者使用其他一些工具来解析文件。