Python如何对比CSV文件两列数据,输出首列不在次列的不匹配值
实现方案(Python版,新手可直接使用)
无需安装额外第三方工具,仅用Python自带模块即可完成需求,处理10万行以内的数据都没有性能问题。
前置说明
- 若你的CSV文件是逗号分隔,修改代码里的分隔符参数为
,即可;如果是制表符分隔则改成\t - 默认区分大小写比对,比如
Valuec和ValueC会判定为不匹配,需要忽略大小写可修改代码里的对应参数 - 若运行提示编码错误,把代码里的
encoding='utf-8'改成encoding='gbk'重试即可
完整可运行代码
import csv # 按需修改以下参数即可 INPUT_FILE = "你的输入文件完整路径.csv" # 比如"C:/Users/xx/Desktop/源数据.csv" OUTPUT_FILE = "results.csv" DELIMITER = " " # CSV列分隔符,逗号分隔填',',制表符填'\t' IGNORE_CASE = False # 不需要区分大小写比对就改成True # 读取第二列所有值存入集合(查找速度远快于列表) col2_values = set() with open(INPUT_FILE, 'r', encoding='utf-8') as f: reader = csv.reader(f, delimiter=DELIMITER) for row in reader: # 跳过空行/无第二列的行 if len(row) >= 2 and row[1].strip(): val = row[1].strip() col2_values.add(val.lower() if IGNORE_CASE else val) # 遍历第一列,筛选出第二列不存在的值 result = [] with open(INPUT_FILE, 'r', encoding='utf-8') as f: reader = csv.reader(f, delimiter=DELIMITER) for row in reader: # 跳过第一列为空的行 if len(row) >= 1 and row[0].strip(): col1_val = row[0].strip() check_val = col1_val.lower() if IGNORE_CASE else col1_val if check_val not in col2_values: result.append([col1_val]) # 写入结果文件 with open(OUTPUT_FILE, 'w', encoding='utf-8', newline='') as f: writer = csv.writer(f) # 不需要表头可以注释掉下面这行 writer.writerow(["第一列中未在第二列匹配到的值"]) writer.writerows(result) print(f"处理完成,共找到{len(result)}个不匹配值,结果已保存到{OUTPUT_FILE}")
使用步骤
- 安装Python环境:官网下载安装包时勾选
Add Python to PATH选项,一路默认安装即可 - 把上面的代码复制到记事本,保存为
csv_compare.py,保存类型选择「所有文件」,编码选utf-8 - 修改代码里的输入文件路径为你实际的CSV文件路径
- 按Win+R输入
cmd打开命令提示符,切换到py文件保存的文件夹,输入python csv_compare.py运行即可
示例运行结果
针对你给出的示例数据,第二列有效值为ValueB、ValueC、ValueA、ValueD,最终会输出到results.csv的第一列值为:
- Valuec
- ValueF
- ValueG
- ValueH
- ValueZ
内容的提问来源于stack exchange,提问作者JOKER
相关产品推荐
相关产品推荐

