Python读取CSV后字典仅返回最后一行数据问题求助
问题原因与解决方案
核心问题
- 字典键被覆盖:你用单一字典
mydict存储数据,每次处理一行时,相同列名的键会被当前行的计算值覆盖,最终只保留最后一行的结果。 - 缩进错误:
for line in rcsv循环写在with代码块外部,文件关闭后再迭代rcsv不符合规范,可能导致读取异常。
解决方案
根据需求选择以下两种方式:
方式1:返回所有行的处理后字典列表
这种方式保留每一行的完整数据,适合逐行处理的场景:
import csv def csvRead(): processed_data = [] with open('data.csv', 'r', newline='') as f: rcsv = csv.DictReader(f, delimiter=',') for line in rcsv: # 生成当前行的处理后字典 row_dict = {k: float(v)*2 for k, v in line.items()} processed_data.append(row_dict) print(row_dict.items()) return processed_data print('current: ', csvRead())
运行后会输出所有行的处理结果,返回值是包含每行字典的列表。
方式2:按列存储所有处理后的值
这种方式将同一列的所有值整理到对应键的列表中,适合按列统计的场景:
import csv def csvRead(): mydict = {} with open('data.csv', 'r', newline='') as f: rcsv = csv.DictReader(f, delimiter=',') # 初始化每个列名对应的空列表 for header in rcsv.fieldnames: mydict[header] = [] for line in rcsv: for k, v in line.items(): mydict[k].append(float(v)*2) print(mydict.items()) return mydict.items() print('current: ', csvRead())
运行后每个列名将对应所有行的处理后值组成的列表。
内容的提问来源于stack exchange,提问作者user18772609
相关产品推荐
相关产品推荐

