[类似帖子][1]
我有一个制表符分隔的电子表格,我正在尝试找出一种删除重复条目的方法。以下是一些与电子表格中的数据具有相同形式的虚构数据:
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.
我希望将 Sam D. Man 的重复行合并为一个保留两个电话号码但不存储两个相同电子邮件和两个相同网站的行。
我考虑这样做的方式是存储前一行并比较名称。如果名称匹配,则比较电话号码。如果电话号码不匹配,请附加到第一行。然后比较电子邮件。如果电子邮件不匹配,请附加到第一行。然后比较网站。如果网站不匹配,则将第二个网站附加到第一个网站。然后删除第二行。
- 我不知道如何删除一行。其他帖子似乎通过将行写入新文件来避免实际删除行。但我认为这对我的情况来说是有问题的,因为我不想将同名的行写两次。
- 有没有更有效的循环方式?嵌套的 for 循环需要一段时间。
- 而且我可以看到自己遇到索引超出限制的问题...
这是我的代码:
with(open('ieca_first_col_fake_text.txt', 'rU')) as f:
sheet = csv.DictReader(f, delimiter = '\t')
# This function takes a tab-delim csv and merges the ones with the same name but different phone / email / websites.
def merge_duplicates(sheet):
# Since duplicates immediately follow, store adjacent and compare. If the same name, append phone number
for row in sheet:
for other_row in sheet:
if row['name'] == other_row['name']:
if row['email'] != other_row['email']:
row['email'].append(other_row['email'])
if row['website'] != other_row['website']:
row['website'].append(other_row['website'])
# code to remove duplicate row
# delete.() or something...
merge_duplicates(sheet)