← 返回工具清单 | 首页

CSV 按某列去重:保留最新一条(Python dict 覆盖法)

2026-10-06 · 本文所有输出均为作者在本机真实运行结果

导出数据、爬虫落库、多次追加记录的 CSV 里,同一个 key 经常出现多行,而我们通常只要「每个 key 的最新一条」。分享一个我日常用的极简写法。

数据样本

demo.csv
a,1
b,2
b,3
c,4

保留最新一条:字典覆盖法

原理:逐行读入,用 key 列做字典的键,后读到的行直接覆盖前面的。全部读完,字典里剩下的就是每个 key 最后一次出现的行。

import csv
rows = list(csv.reader(open('demo.csv')))
seen = {}
for r in rows:
    seen[r[0]] = r          # 同 key 后行覆盖前行 = 保留最新
print(list(seen.values()))

实际运行输出:

[['a', '1'], ['b', '3'], ['c', '4']]

b 保留的是第 3 行(最新),正确。

保留最早一条:换 set 收集

import csv
rows = list(csv.reader(open('demo.csv')))
seen = set(); keep_first = []
for r in rows:
    if r[0] not in seen:
        seen.add(r[0]); keep_first.append(r)
print(keep_first)

实际运行输出:

[['a', '1'], ['b', '2'], ['c', '4']]

几个容易踩的坑

一行版(适合管道里顺手用)

python3 -c "import csv,sys; d={r[0]:r for r in csv.reader(sys.stdin)}; [print(','.join(r)) for r in d.values()]" < demo.csv
💡 如果你的去重场景更复杂(多列联合 key、按时间列取最新、Excel 文件去重),我可以帮你写定制脚本。
看看服务与价格 → 脚本类 19.9 元,交付前先在你给的真实数据上跑通。