基于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
相关产品推荐
相关产品推荐

