gpt4 book ai didi

python - 读取 csv 文件并仅在另一个 csv 文件中添加新条目

转载 作者:行者123 更新时间:2023-12-01 04:35:10 25 4
gpt4 key购买 nike

我有一个 csv 文件,每天都会向其中添加重复的数据和唯一的数据。这涉及太多重复项。我必须根据特定列删除重复项。例如:

csv文件1:

title1 title2 title3 title4 title5
abcdef 12 13 14 15
jklmn 12 13 56 76
abcdef 12 13 98 89
bvnjkl 56 76 86 96

现在,基于 title1、title2 和 title3,我必须删除重复项并将唯一条目添加到新的 csv 文件中。正如您所看到的 abcdef 行不是唯一的,并且基于 title1、title2 和 title3 重复,因此应该将其删除,输出应如下所示:

预期输出 CSV 文件:

title1 title2 title3 title4 title5
jklmn 12 13 56 76
bvnjkl 56 76 86 96

我尝试过的代码如下:CSVINPUT 文件 导入csv

f = open("1.csv", 'a+')

writer = csv.writer(f)

writer.writerow(("t1", "t2", "t3"))

a =[["a", 'b', 'c'], ["g", "h", "i"],['a','b','c']] #This list is changed daily so new and duplicates data get added daily


for i in range(2):
writer.writerow((a[i]))

f.close()

重复删除脚本:

import csv




with open('1.csv','r') as in_file, open('2.csv','w') as out_file:
seen = set() # set for fast O(1) amortized lookup
for line in in_file:
if line not in seen: continue # skip duplicate


out_file.write(line)

我的输出:2.csv:

t1 t2 t3
a b c
g h i

现在,我不想要基于 t1 和 t2 的 2.csv 中的 b c,只想要基于 t1 和 t2 的唯一 g h i

最佳答案

代码中的一些问题 -

  1. 在创建 csv 文件的 python 文件中,您仅迭代直到 - range(2) , range不包含在内,因此它只将前两列写入csv,而不是第三列,您可以直接迭代csv,而不是迭代每个元素。另外,您不需要 writer.writerow() 中那么多括号。 ,示例-

    for i in a:
    writer.writerow(i)
  2. 在重复删除脚本中,您实际上从未将任何内容添加到 seen() 中。 ,所以你永远不会最终删除任何东西。当您想要根据列表的元素子集删除重复项时,只需将这些元素(按特定顺序)添加到 seen 中即可。设置(作为元组),而不是列表,因为 set()只接受可散列元素。然后,在检查集合中的包含情况时,仅检查您添加的子集。示例-

    import csv
    with open('1.csv','r') as in_file, open('2.csv','w') as out_file:
    seen = set()
    seentwice = set()
    reader = csv.reader(in_file)
    writer = csv.writer(out_file)
    rows = []
    for row in reader:
    if (row[0],row[1]) in seen:
    seentwice.add((row[0],row[1]))
    seen.add((row[0],row[1]))
    rows.append(row)
    for row in rows:
    if (row[0],row[1]) not in seentwice:
    writer.writerow(row)

这将完全删除基于第一列和第二列重复的任何行。它甚至不会为这些行存储一行,我猜这就是您想要的。

seen - set - 这用于存储我们已经看到的行。

seentwice - set - 如果我们遇到先前已添加到 seen 的行,则此集合仅填充一行。 ,这意味着该行是重复的。

最后,我们只想写 rows不在里面 seentwice ,自任何 rowseentwice意味着它是重复的,该行在 row[0] 处至少有两个具有相似值的不同行。和row[1] .

关于python - 读取 csv 文件并仅在另一个 csv 文件中添加新条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31827896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com