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    cersei@got.com  www.got.com
Argle D. Bargle Ed.M.           
Sam D. Man Ed.M.    000-000-1111    dman123@gmail.com   www.daManWithThePlan.com
Sam D. Man Ed.M.            
Sam D. Man Ed.M.    111-222-333     dman123@gmail.com   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': 'cersei@got.com'}
{'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': 'dman123@gmail.com'}
{'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': '    dman123@gmail.com'}
{'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': 'cersei@got.com'}
{'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': 'dman123@gmail.com'}
{'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': '    dman123@gmail.com'}
{'website': '', 'phone': '', 'flag': 4, 'name': 'D G Bamf M.S.', 'email': ''}
{'website': '', 'phone': '', 'flag': 5, 'name': 'Amy Tramy Lamy Ph.D.', 'email': ''}
4

1 に答える 1

0

編集:このループは私のために機能します(期待どおりの出力):

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 ファイルを手動でフォーマットする必要があったことに注意してください (タブはタブではなくスペースでした)。ファイルで正しいことを確認してください。名前は正確である必要があり、スペースを追加することはできません

しかし、これが唯一のバグかどうかはわかりません。危険な「オフバイワン」トラップがたくさんあるからです。それでもうまくいかない場合は、出力とコードを更新してください。

于 2013-07-08T19:39:55.420 に答える