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

如何在Python中基于共同列合并两个CSV文件并生成指定输出?

如何基于City字段合并两个CSV文件并生成输出?

看起来你想要基于City字段关联两个CSV文件,把用户信息和对应的州信息合并到一起输出。我们先梳理下现有代码里的几个问题,再给出正确的实现方案:

现有代码的问题

  • 文件名不匹配:你描述的是file1.csv和file2.csv,但代码里用的是allUsers1.csv和mahrashtra.csv,如果这是笔误,需要先修正文件名
  • 索引错误:file1.csv的字段顺序是Name(0)、EmailId(1)、City(2),所以要取城市应该用row1[2],而不是row1[5];另外你需要比较的是两个文件的City字段,也就是row1[2]和row2[0],而不是row2[1](row2[1]是State)
  • 嵌套循环逻辑缺陷:当你第一次遍历reader2后,这个迭代器就已经耗尽了,后续的row1循环里reader2不会再有数据返回
  • 未处理大小写差异:file1里的城市是pune(小写),file2里是Pune(首字母大写),直接字符串比较会不匹配
  • 没有生成目标输出:当前代码只打印了row1,没有合并State字段并写入输出文件

正确的实现方案

我们可以先把file2.csv的城市-州映射存入字典,这样后续查找州信息的效率会很高,然后遍历file1.csv的每一行,匹配对应的州并生成合并后的行,写入输出文件:

import csv

def merge_csv_files():
    # 第一步:读取file2.csv,构建City到State的映射字典
    city_state_map = {}
    with open(r'C:\Users\admin\Desktop\compare\file2.csv', 'r', newline='', encoding='utf-8') as f2:
        reader2 = csv.reader(f2, delimiter=',')
        # 跳过表头(如果你的CSV有表头的话,无表头可注释此行)
        next(reader2)
        for row in reader2:
            city = row[0].strip().lower()  # 统一转小写,避免大小写匹配问题
            state = row[1].strip()
            city_state_map[city] = state
    
    # 第二步:读取file1.csv,合并State并写入输出文件
    output_file = r'C:\Users\admin\Desktop\compare\merged_output.csv'
    with open(r'C:\Users\admin\Desktop\compare\file1.csv', 'r', newline='', encoding='utf-8') as f1, \
         open(output_file, 'w', newline='', encoding='utf-8') as out_f:
        reader1 = csv.reader(f1, delimiter=',')
        writer = csv.writer(out_f, delimiter=',')
        
        # 处理表头:如果file1有表头,添加State字段后写入
        header = next(reader1)
        header.append('State')
        writer.writerow(header)
        
        # 处理每一行数据
        for row in reader1:
            user_city = row[2].strip().lower()
            # 查找对应的州,找不到则用默认值'Unknown'(可按需修改)
            state = city_state_map.get(user_city, 'Unknown')
            # 合并行数据并写入
            merged_row = row + [state]
            writer.writerow(merged_row)
            # 可选:打印结果到控制台
            print(','.join(merged_row))

merge_csv_files()

额外说明

  • 用with open()的方式可以自动关闭文件,比直接open()更安全规范
  • 添加strip()处理多余空格,避免因空格导致的匹配失败
  • 统一转小写比较城市名称,解决大小写不一致的问题
  • 如果你的CSV文件没有表头,记得注释掉跳过表头的next(reader)和表头处理代码

内容的提问来源于stack exchange,提问作者himani keskar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:54:44