Python删除重复项。

2024-04-20 05:59:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试让我的代码删除一个.csv文件中的重复项。可以找到http://www.sharecsv.com/s/29ae855f20472de54b12fa66bbe3cbb9/DBA.csv

我得到了一个关于该怎么做的建议,最后得到了如下代码:

def deleteDuplicate():
    seen = set()
    dupeCount = 0
    counter = 0
    with FileInput('DBA.csv', inplace=1) as f:
        f, f_orig = tee(f)
        for row, line in zip(csv.reader(f), f_orig):
            if row[2] in seen:
                dupeCount+=1
                continue
            seen.add(row[2])
            counter+=1
            print(line, end='')
        print(counter)
        print("Removed {} Duplicates".format(dupeCount))

以上代码非常适合在较小的测试规模上删除重复项,如:

null,first,second,third
zero,one,two,three
null,first,second,third
nul,un,deux,trois
0,"1,one",2,3

当我在更大的.csv文件上运行它时,它会很好地删除重复项,但最后会额外删除4行。删除的4行不会在我的dupeCount中被跟踪,因此它们不应该触发我的if语句。你知道吗

我必须承认,我不太清楚itertools中tee()的用法是用来做什么的,以及为什么它是有益的。你知道吗

我的两个问题是: 为什么deleteDuplicate()在较大的.csv文件中删除4行,为什么使用tee()和zip?你知道吗


Tags: 文件csv代码inlinecounterzipdba
1条回答
网友
1楼 · 发布于 2024-04-20 05:59:31

请看数据的第一行,描述中有换行符'\n'(以及逗号),因此我们有7行数据

Date,Price DKK,URL,Description
19/5,1 kr.,http://www.dba.dk/8660-vegavej-1-14/id-102010171/,"8660, Vegavej 1-14, hel�rsgrund, Boligprojekt s�lges 1-14 boliger
R�kkehusene ligger ud til et stort smukt fredet omr�de. Alle boliger har private sydvendte haver, som ligger direkte ud til et f�lles omr�de. Der er altan, hvorfra der er udsigt over det facinerende og karakteristiske landskab med �l�b, heste, gravh�j.
Aktiv fritid og lokalmilj�.
Tebstrup er en lille landsby med 660 indbyggere. I byen er der skole, b�rnehave m.m
se"
19/5,1.599.000 kr.,http://www.dba.dk/7800-4-103-372-2013/id-93506363/,"7800 4, 103, 372, 2013, Fyrt�jet 8, 7656, 6130, 80000, Villa"

但如果用csv(和excel)读取,换行符会被引号括起来,因此该行只有一个单元格。你知道吗

with open("output.csv") as f : 
    for row in csv.reader(f):
        print( row )  

['Date', 'Price DKK', 'URL', 'Description']
['19/5', '1 kr.', 'http://www.dba.dk/8660-vegavej-1-14/id-102010171/', '8660, Vegavej 1-14, hel\xef\xbf\xbdrsgrund, Boligprojekt s\xef\xbf\xbdlges 1-14 boliger\r\nR\xef\xbf\xbdkkehusene ligger ud til et stort smukt fredet omr\xef\xbf\xbdde. Alle boliger har private sydvendte haver, som ligger direkte ud til et f\xef\xbf\xbdlles omr\xef\xbf\xbdde. Der er altan, hvorfra der er udsigt over det facinerende og karakteristiske landskab med \xef\xbf\xbdl\xef\xbf\xbdb, heste, gravh\xef\xbf\xbdj.\r\nAktiv fritid og lokalmilj\xef\xbf\xbd.\r\nTebstrup er en lille landsby med 660 indbyggere. I byen er der skole, b\xef\xbf\xbdrnehave m.m\r\nse']
['19/5', '1.599.000 kr.', 'http://www.dba.dk/7800-4-103-372-2013/id-93506363/', '7800 4, 103, 372, 2013, Fyrt\xef\xbf\xbdjet 8, 7656, 6130, 80000, Villa']

文件行可能不等于csv数据中的行。你知道吗

编辑

添加到测试文件以确认您可能看到的内容。你知道吗

null,first,second,third
zero,one,two,"three
,four
five\r\n"
null,first,second,third
nul,un,deux,trois
0,"1,one",2,3

相关问题 更多 >