使用python在csv文件的同一行上删除相同的值

时间:2018-07-24 16:02:27

标签: python-3.x

我有一个已发送给我的.csv文件,但各行中有多个相同值

方法 我想删除同一行中已经存在的值,并且只保留一个

技术规范: Windows 10 Python 3.6 带有600万行的CSV文件

csv文件的示例:

323|2013-06-03 00:00:00|(B)|(B)|(B)|(B)|100||Dort
323|2013-06-03 01:00:00|||||99||
323|2013-06-03 02:00:00|||||100||Dort
323|2013-06-03 03:00:00|||||97||
323|2013-06-03 04:00:00|||(B)|(B)|97||Dort
323|2013-06-03 05:00:00|||||97||
323|2013-06-03 06:00:00|||||97||
323|2013-06-03 07:00:00|||(B)|(B)|96||Dort
323|2013-06-03 08:00:00|(D)|(D)|(B)|(B)|100||Éveillé-réceptif

所需结果

323|2013-06-03 00:00:00|(B)|100||Dort
323|2013-06-03 01:00:00|||||99||
323|2013-06-03 02:00:00|||||100||Dort
323|2013-06-03 03:00:00|||||97||
323|2013-06-03 04:00:00|||(B)|97||Dort
323|2013-06-03 05:00:00|||||97||
323|2013-06-03 06:00:00|||||97||
323|2013-06-03 07:00:00|||(B)|96||Dort
323|2013-06-03 08:00:00|(D)|(B)|100||Éveillé-réceptif

1 个答案:

答案 0 :(得分:0)

import csv

with open('data.csv') as f_in, open('data_out.csv', 'w', newline='') as f_out:
    csvreader = csv.reader(f_in, delimiter='|')
    csvwriter = csv.writer(f_out, delimiter='|')

    for row in csvreader:
        r = []
        while row:
            v, row = row[0], row[1:]
            if v in row and len(v) > 0:
                continue
            r.append(v)
        csvwriter.writerow(r)

输出文件中的数据:

323|2013-06-03 00:00:00|(B)|100||Dort
323|2013-06-03 01:00:00|||||99||
323|2013-06-03 02:00:00|||||100||Dort
323|2013-06-03 03:00:00|||||97||
323|2013-06-03 04:00:00|||(B)|97||Dort
323|2013-06-03 05:00:00|||||97||
323|2013-06-03 06:00:00|||||97||
323|2013-06-03 07:00:00|||(B)|96||Dort
323|2013-06-03 08:00:00|(D)|(B)|100||Éveillé-réceptif