我找不到基于第2列的删除重复行的方法。我查看了csv模块的文档,但看不到实现的任何内容。
我当前的输出,用于list-history.csv:
Number,Keywords
5,banana
8,apple
Number,Keywords
5,banana
Number,Keywords
5,banana
8,apple
所需的输出:
Number,Keywords
5,banana
8,apple
并将新条目追加到所需的输出。
我尝试了另一种方法,但这是我发现的最接近的方法,没有提到第2列。从这一点上我真的不知道该怎么做。
with open("list-history.csv", "r") as f:
lines = f.readlines()
with open("list-history.csv", "a", encoding="utf8") as f:
reader = csv.reader(f)
header = next(reader)
for line in reader:
if line.strip("\n") == "Number,Keywords":
f.write(line)
但是此代码不会删除整列2中的其他重复项。我只想保留标题一次,并且没有重复项。我的约束是保持数据从文件1到文件2进入,文件2是关于上面代码的文件。
===解决的问题=======
import fileinput
seen = set() # set for fast O(1) amortized lookup
for line in fileinput.FileInput('1.csv', inplace=1):
if line in seen: continue # skip duplicate
seen.add(line)
print(line, end='')
Removing duplicate rows from a csv file using a python script
答案 0 :(得分:0)
我不知道是否允许您使用 csv 之外的其他模块;但是如果您这样做,可以使用 pandas 解决此问题。
import pandas as pd
df = pd.read_csv('list-history.csv')
df = df.drop_duplicates(subset=['Keywords'], keep='first')
print(df)
答案 1 :(得分:0)
删除所有重复值
data.drop_duplicates(subset ="Keywords",keep = False, inplace = True)
答案 2 :(得分:0)
您可以按照以下两个步骤进行操作。
第一步,将文件的各行读取到collections.OrderedDict
中,这将自动将重复项排除在文件之外。
第二步只是使用此字典的键覆盖文件。
from collections import OrderedDict
import csv
# 1. Read file into an OrderedDict which automatically removes any duplicates.
with open("list-history.csv", "r") as file:
temp_dict = OrderedDict.fromkeys(line.strip() for line in file)
# 2. Rewrite file.
with open("list-history.csv", "w", newline='') as file:
writer = csv.writer(file)
for row in csv.reader(temp_dict):
writer.writerow(row)
在Python 3.7+中,您可以使用常规词典,因为从该版本开始,它们还保持顺序。
答案 3 :(得分:0)
您需要保留到目前为止已经看到的几行,甚至不需要CSV阅读器:
with open("list-history.csv") as infile,
open("list-history-copy.csv", "w", encoding="utf8") as outfile:
lines = set()
for line in infile:
if line not in lines:
data.add(lines)
outfile.writeline(line + "\n")