Python删除重复项。

时间:2017-06-15 19:34:07

标签: python csv zip

我试图让我的代码删除.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?

1 个答案:

答案 0 :(得分:1)

查看数据的第一行,描述中有新行'\ n'(以及逗号),所以我们有7行数据

import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph.console
import numpy as np

from pyqtgraph.dockarea import *


win = QtGui.QMainWindow()
area = DockArea()
win.setCentralWidget(area)
win.resize(1000,500)
win.setWindowTitle('pyqtgraph example: dockarea')


d1 = Dock("Dock1")
d2 = Dock("Dock2")
area.addDock(d1, 'bottom')
area.addDock(d2, 'bottom', d1)

w1 = pg.PlotWidget(title="Dock 1 plot")
w1.plot(np.random.normal(size=100))
d1.addWidget(w1)

w2 = pg.PlotWidget(title="Dock 2 plot")
w2.plot(np.random.normal(size=100))
d2.addWidget(w2)

win.show()

## Start Qt event loop unless running in interactive mode or using pyside.
if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

但是如果用csv(和excel)读取它,则新行由引号封装,因此它在该行上只有一个单元格。

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数据中的行不相等。

修改

添加到您的测试文件以确认您可能会看到的内容。

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']
相关问题