[Similar Post] [1]刪除重複行
我有一個製表符分隔的電子表格,我試圖找出一種方法來刪除重複的條目。下面是具有相同的形式在電子表格中的數據一些虛構的數據:
name phone email website
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.
我想有重複的行薩姆D.人合併成一個令兩個電話號碼,但沒有按」 t存儲兩個相同的電子郵件和兩個相同的網站。
我想這樣做的方式是存儲上一行並比較名稱。如果名稱匹配,則比較電話號碼。如果電話號碼不匹配,請追加到第一行。然後比較電子郵件。如果電子郵件不匹配,請追加到第一行。然後比較網站。如果網站不匹配,則將第二個網站附加到第一個網站。然後刪除第二行。
- 我不知道如何刪除一行。其他帖子似乎避免通過將行寫入新文件來實際刪除行。但我認爲這對我的情況是有問題的,因爲我不想用兩次相同的名字來寫行。
- 有沒有更有效的方法來循環?嵌套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)
我想你會想要將合併的結果存儲在某個地方(或者在另一個文件中,或者暫時存儲在內存中,具體取決於你使用的數據量),否則你會從文件中刪除行正在迭代,這通常被認爲是否定的。 – erewok
好吧,以便解決我提到的問題。當我遍歷示例電子表格併到達Sam D. Man的第二個實例時會發生什麼? – goldisfine
你有沒有考慮過使用「熊貓」。你的問題有很多解決方案。 – LonelySoul