重複したエントリを削除するスクリプトを書いています。データ内の一部の人は、電話番号が 2 つあるため、名前を 2 回入力しています。また、電話番号フィールドが配列ではないため、複数入力するために、複数のエントリを入力しました。
私のスクリプトは、列名に対応するキーを持つ辞書にエントリを変更し、各行を通過します。各行を通過するマスター for ループと、各要素のすべての要素を実行するネストされた for ループがあり、それらを比較して重複を検出します。重複にヒットすると、コードは電話、電子メール、および Web サイトを比較し、それらが一意である/一致しない場合はそれらを領域に追加することになっています。
これが私のコードです:
import csv
# This function takes a tab-delim csv and merges the ones with the same name but different phone / email / websites.
def merge_duplicates(sheet):
myjson = [] # myjson = list of dictionaries where each dictionary
with(open("ieca_first_col_fake_text.txt", "rU")) as f:
sheet = csv.DictReader(f,delimiter="\t")
for row in sheet:
myjson.append(row)
write_file = csv.DictWriter(open('duplicates_deleted.csv','w'), ['name','phone','email','website'], restval='', delimiter = '\t')
for row in myjson:
# convert phone, email, and web to lists so that extra can be appended
row['phone'] = row['phone'].split()
row['email'] = row['email'].split()
row['website'] = row['website'].split()
print row
for i in len(myjson):
# if the names match, check to see if phone, em, web match. If any match, append to first row.
try:
if myjson[i]['name'] == myjson[i+1]['name']:
if myjson[i]['phone'] != myjson[i+1]['phone']:
myjson[i]['phone'].append(myjson[i+1]['phone'])
# if row['email'] != myjson[rowvalue+1]['email']:
# row['email'].append(myjson[rowvalue+1]['email'])
# if row['website'] != myjson[rowvalue+1]['website']:
# row['website'].append(myjson[rowvalue+1]['website'])
except IndexError:
print("We're at the end now")
write_file.writerow(row)
merge_duplicates('ieca_first_col_fake_text.txt')
したがって、私のコードではすべてがうまくいき、最初の重複にヒットすると、次のエラーが発生します。
{'website': [], 'phone': [], 'name': 'Diane Grant Albrecht M.S.', 'email': []}
{'website': ['www.got.com'], 'phone': ['111-222-3333'], 'name': 'Lannister G. Cersei M.A.T., CEP', 'email': ['cersei@got.com']}
{'website': [], 'phone': [], 'name': 'Argle D. Bargle Ed.M.', 'email': []}
{'website': ['www.daManWithThePlan.com'], 'phone': ['000-000-1111'], 'name': 'Sam D. Man Ed.M.', 'email': ['dman123@gmail.com']}
Traceback (most recent call last):
File "/Users/samuelfinegold/Documents/noodle/delete_duplicates.py", line 40, in <module>
merge_duplicates('ieca_first_col_fake_text.txt')
File "/Users/samuelfinegold/Documents/noodle/delete_duplicates.py", line 20, in merge_duplicates
row['email'] = row['email'].split()
AttributeError: 'NoneType' object has no attribute 'split'
logout
助けてくれてどうもありがとう!
それが役立つ場合のExデータ:
name phone email website
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.