2013-07-08 50 views
0

我正在处理人们输入其姓名和一些联系信息的数据。但是,由于他们无法为某些字段输入多个条目,因此有些人多次输入其名称,导致“重复”条目...标记具有相同名称的条目?

我试图用同一用户标记重复条目一个变量“标志”。

对于每一行,我想要发生的是,如果行中的名称条目与下一行中的名称条目不相同,则标志条目应该增加1。

我该怎么做?

这是代码我目前有:

# FLAG 2 

import csv 

myjson = [] 

with(open("ieca_first_col_fake_text.txt", "rU")) as f: 
    sheet = csv.DictReader(f,delimiter="\t") 
    sheet.fieldnames.append('flag') 
    print sheet.fieldnames 
    for row in sheet: 
     myjson.append(row) 

flag_counter = 0 
myjson[0]['flag'] = flag_counter 

for i in range(len(myjson)-1): 
    if myjson[i]['name'] != myjson[i+1]['name']: 
     myjson[i+1]['flag'] = flag_counter + 1 
    else: 
     myjson[i]['flag'] = flag_counter 

for i in range(len(myjson)): 
    print myjson[i] 

这是示例性数据:

name phone email website area degree 
Diane Grant Albrecht M.S.   
Lannister G. Cersei M.A.T., CEP 111-222-3333 [email protected] www.got.com 
Argle D. Bargle Ed.M.   
Sam D. Man Ed.M. 000-000-1111 [email protected] www.daManWithThePlan.com 
Sam D. Man Ed.M.    
Sam D. Man Ed.M. 111-222-333  [email protected] www.daManWithThePlan.com 
D G Bamf M.S.   
Amy Tramy Lamy Ph.D.    

而这是从在例如数据进行操作而产生的输出:

['name', 'phone', 'email', 'website', 'flag'] 
{'website': '', 'phone': '', 'flag': 0, 'name': 'Diane Grant Albrecht M.S.', 'email': ''} 
{'website': 'www.got.com', 'phone': '111-222-3333', 'flag': 1, 'name': 'Lannister G. Cersei M.A.T., CEP', 'email': '[email protected]'} 
{'website': '', 'phone': '', 'flag': 1, 'name': 'Argle D. Bargle Ed.M.', 'email': ''} 
{'website': 'www.daManWithThePlan.com', 'phone': '000-000-1111', 'flag': 0, 'name': 'Sam D. Man Ed.M.', 'email': '[email protected]'} 
{'website': None, 'phone': '', 'flag': 0, 'name': 'Sam D. Man Ed.M.', 'email': None} 
{'website': 'www.daManWithThePlan.com', 'phone': '111-222-333', 'flag': None, 'name': 'Sam D. Man Ed.M.', 'email': ' [email protected]'} 
{'website': '', 'phone': '', 'flag': 1, 'name': 'D G Bamf M.S.', 'email': ''} 
{'website': '', 'phone': '', 'flag': 1, 'name': 'Amy Tramy Lamy Ph.D.', 'email': ''} 

请注意,标志不符合所需的模式。

这里是一个理想的输出(请注意标志项的差异):

['name', 'phone', 'email', 'website', 'flag'] 
{'website': '', 'phone': '', 'flag': 0, 'name': 'Diane Grant Albrecht M.S.', 'email': ''} 
{'website': 'www.got.com', 'phone': '111-222-3333', 'flag': 1, 'name': 'Lannister G. Cersei M.A.T., CEP', 'email': '[email protected]'} 
{'website': '', 'phone': '', 'flag': 2, 'name': 'Argle D. Bargle Ed.M.', 'email': ''} 
{'website': 'www.daManWithThePlan.com', 'phone': '000-000-1111', 'flag': 3, 'name': 'Sam D. Man Ed.M.', 'email': '[email protected]'} 
{'website': None, 'phone': '', 'flag': 3, 'name': 'Sam D. Man Ed.M.', 'email': None} 
{'website': 'www.daManWithThePlan.com', 'phone': '111-222-333', 'flag': 3, 'name': 'Sam D. Man Ed.M.', 'email': ' [email protected]'} 
{'website': '', 'phone': '', 'flag': 4, 'name': 'D G Bamf M.S.', 'email': ''} 
{'website': '', 'phone': '', 'flag': 5, 'name': 'Amy Tramy Lamy Ph.D.', 'email': ''} 

回答

0

编辑: 我THS循环workes(如预期输出):

for i in range(len(myjson)-1): 
    if myjson[i]['name'] != myjson[i+1]['name']: 
     print "not same" ,myjson[i]['name'] ,' ', myjson[i+1]['name'] 
     flag_counter = flag_counter + 1 
     myjson[i+1]['flag'] = flag_counter 
    else: 
     print 'equal', myjson[i]['name'] ,' ', myjson[i+1]['name'] 
     myjson[i]['flag'] = flag_counter 

注意,我必须手工格式化csv文件(标签不是标签,而是空格)。确保它在你的文件中是正确的。名字必须是完全正确的,没有额外的空间允许

但我不确定这是否是唯一的错误,因为有许多危险的'off-by-one'陷阱。如果它仍然不起作用,只需更新您的输出和代码,我们就会看到!

+0

不要以为就是这样。 – goldisfine

+0

为什么,flag_counter总是为零,所以如果它是一个新名称,则分配0 + 1,否则为0.但是你说得对,这很可能不是唯一的错误...... – user27564

相关问题