You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从a.csv移除b.csv已存在的记录以生成含11.5k条的c.csv?

当然可以实现这个需求!说白了就是从a.csv里把b.csv已有的记录全部剔除,剩下的就是你要的c.csv,刚好对应20k-8.5k=11.5k条记录。下面给你几个不同场景下的实用方案,按需选就行:

方法一:Python脚本(灵活可控,适合需要定制匹配规则的情况)

如果你懂点Python,这个方法最靠谱,尤其是当你需要按特定字段(比如用户ID、订单号)匹配,而不是整行完全一致的时候。给你个现成的脚本示例:

import csv

# 这里假设用第一列作为匹配的唯一标识,要是匹配其他列,改row的索引就行
def get_match_key(row):
    return row[0]

# 先把b.csv里的所有匹配键存到集合里,查起来快
b_records = set()
with open('b.csv', 'r', newline='', encoding='utf-8') as b_file:
    b_reader = csv.reader(b_file)
    next(b_reader)  # 跳过表头,要是没有表头就删掉这行
    for row in b_reader:
        b_records.add(get_match_key(row))

# 遍历a.csv,把不在b里的记录写入c.csv
with open('a.csv', 'r', newline='', encoding='utf-8') as a_file, \
     open('c.csv', 'w', newline='', encoding='utf-8') as c_file:
    a_reader = csv.reader(a_file)
    c_writer = csv.writer(c_file)
    # 保留表头
    header = next(a_reader)
    c_writer.writerow(header)
    
    for row in a_reader:
        if get_match_key(row) not in b_records:
            c_writer.writerow(row)

要是你需要整行完全匹配,直接把get_match_key(row)改成tuple(row)就好,非常灵活。

方法二:命令行工具(Linux/macOS专属,快速高效)

如果你平时用命令行,不用写代码,用sort加comm就能搞定:

  1. 先把两个文件排序(comm要求输入文件是排序后的):
sort a.csv > a_sorted.csv
sort b.csv > b_sorted.csv
  1. 提取a独有的记录:
comm -23 a_sorted.csv b_sorted.csv > c.csv

解释一下:-23参数的意思是,只保留第一个文件里有、第二个文件里没有的内容,刚好符合你的需求。要是CSV有表头,注意如果b的表头和a一样,可能会被误删,这时候可以先手动把表头复制到c.csv,再处理内容行。

方法三:Excel/Numbers(适合非技术用户,用办公软件搞定)

要是你更习惯用办公软件,也能轻松实现:

  1. 把a.csv和b.csv分别导入Excel的两个工作表(比如Sheet1放a的内容,Sheet2放b的)。
  2. 在Sheet1的空白列(比如最后一列)输入公式:=ISERROR(VLOOKUP(A1, Sheet2!A:A, 1, FALSE)),这里假设A列是用来匹配的唯一列(比如ID),按回车后,显示TRUE就代表这条记录不在b里,FALSE则表示在b里。
  3. 把公式下拉到所有行,然后筛选出该列为TRUE的行,复制粘贴到新工作表,最后导出成CSV文件就是c.csv了。

内容的提问来源于stack exchange,提问作者Oluf Nielsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:39:26