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

Python如何读取两个CSV合并去重后写入单个文件并对齐字段

问题原因

你的现有代码是将第一个CSV的所有国家数据、第二个CSV的所有面积数据作为独立条目先后追加到同一个列表中,两类数据没有做关联匹配,自然会出现前半部分行缺少Area字段、后半部分行缺少其他字段的错位问题。你需要通过公共字段ISO3做关联,将Area字段补充到对应国家的已有数据条目里。

调整后完整代码

import csv

language_file = '/file/path/shortlist_languages.csv'
area_file = '/file/path/shortlist_area.csv'
fp_write = input("Enter fp for writing new CSV (do not include .csv extension): ")

# 用字典存储语言数据,key为ISO3,方便快速匹配
country_map = {}

# 读取语言CSV
with open(language_file, encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        iso3 = row['ISO3']
        country_map[iso3] = {
            'ISO3': iso3,
            'Languages': row['Languages'],
            'Country Name': row['Country Name']
        }

# 读取面积CSV,匹配对应国家补充Area字段
with open(area_file, encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        iso3 = row['ISO3']
        # 仅处理两个表共有的ISO3条目,如果需要保留仅在面积表存在的条目可额外扩展逻辑
        if iso3 in country_map:
            country_map[iso3]['Area'] = row['Area']

# 写入新CSV,按要求的表头顺序输出
output_path = f"{fp_write}country_data_table.csv"
fieldnames = ['ISO3', 'Area', 'Languages', 'Country Name']
with open(output_path, 'w', encoding='utf-8', newline='') as f:
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    writer.writeheader()
    for country_data in country_map.values():
        writer.writerow(country_data)

核心修改点

  • 读取第一个CSV时改用ISO3为键的字典存储数据,无需遍历即可快速匹配对应国家条目
  • 读取第二个CSV时直接给匹配到的国家条目新增Area字段,不再追加独立的新条目
  • 调整输出表头顺序为你要求的['ISO3', 'Area', 'Languages', 'Country Name'],符合预期输出规范
  • 新增encoding='utf-8'参数避免不同系统下的特殊字符乱码问题,如果你的文件是其他编码可自行调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:57:00