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

基于Python的多CSV处理:读取、字典存储与字段覆盖需求

解决CSV数据读取与字段覆盖并生成指定结构结果的方案

嘿,我来帮你搞定这个需求!咱们一步步实现读取三个CSV文件、用第三个CSV的字段覆盖前两个,最后生成你要的特定输出结构。

步骤1:导入模块并读取CSV数据

首先用Python内置的csv模块读取文件,把每个CSV的内容转换成字典列表,按「文件名-字典列表」的结构暂存——完全符合你“不写入新CSV,只在内存存储”的要求。

import csv
from itertools import cycle

# 定义要读取的CSV文件(如果文件不在当前目录,记得填完整路径)
csv_filenames = ['csv1_data.csv', 'csv2_data.csv', 'csv3_data.csv']
data_store = {}

# 读取每个CSV并转成字典列表存储
for filename in csv_filenames:
    with open(filename, mode='r', newline='', encoding='utf-8') as file:
        # DictReader会自动把表头作为字典的键
        csv_reader = csv.DictReader(file)
        # 去掉文件名后缀,用纯名称作为key存入data_store
        data_key = filename.split('.')[0]
        data_store[data_key] = list(csv_reader)

步骤2:实现字段覆盖逻辑

看你的示例,csv3的记录是循环用来覆盖前两个CSV的(比如csv1第3行复用csv3第1行的值,第4行复用csv3第2行的值),所以我们用itertools.cycle来循环csv3的记录。同时还要按要求筛选字段:

  • csv1只保留marks1(被csv3覆盖)和marks2(原数据)
  • csv2只保留marks3(原数据)和marks4(被csv3覆盖)
# 循环csv3的记录,用于覆盖操作
csv3_records = cycle(data_store['csv3_data'])

# 处理csv1_data:覆盖marks1,保留marks2
processed_csv1 = []
for row in data_store['csv1_data']:
    current_csv3_row = next(csv3_records)
    processed_row = {
        'marks1': current_csv3_row['marks1'],
        'marks2': row['marks2']
    }
    processed_csv1.append(processed_row)

# 重置循环,处理csv2_data:保留marks3,覆盖marks4
csv3_records = cycle(data_store['csv3_data'])
processed_csv2 = []
for row in data_store['csv2_data']:
    current_csv3_row = next(csv3_records)
    processed_row = {
        'marks3': row['marks3'],
        'marks4': current_csv3_row['marks4']
    }
    processed_csv2.append(processed_row)

步骤3:生成指定格式的输出

最后把处理好的两个列表组合成你要的元组列表结构:

output = [
    ('csv1_data', processed_csv1),
    ('csv2_data', processed_csv2)
]

# 可以打印验证结果
print(output)

运行后得到的结果和你给出的示例完全一致:

[('csv1_data', [{'marks1': '90', 'marks2': '15'}, {'marks1': '87', 'marks2': '80'}, {'marks1': '90', 'marks2': '11'}, {'marks1': '87', 'marks2': '23'}]), ('csv2_data', [{'marks3': '11', 'marks4': '100'}, {'marks3': '4', 'marks4': '80'}, {'marks3': '4', 'marks4': '100'}, {'marks3': '2', 'marks4': '80'}])]

小补充

如果需要把字段值转换成数值类型(比如整数),只需要在赋值时加int()转换,比如:

'marks1': int(current_csv3_row['marks1'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:32:57