Python读取CSV文件提取C1列值赋值给变量的代码问题排查
错误原因
你此前读取CSV生成的items字典结构本身符合预期:items['C1']已经存储了C1列所有行的字符串格式数值,问题出在后续的取值逻辑:
- 你遍历了
items的所有键,排除Item后还会遍历C1、C2、C3、Constant四个键,每次循环都会重新给c1赋值为单个float值,最终c1只会保留最后一次循环的单个值,无法得到整列数据 - 你每次取
items[key][0]的逻辑仅能获取当前键对应列表的第一个元素,没有遍历整列的操作
修正方案
直接提取items['C1']的所有元素批量转换为float即可,不需要遍历items的所有键,替换原有代码最后一段for循环的内容即可:
# 提取C1列所有值,生成float格式的列表 c1 = [float(val) for val in items['C1']] # 其余列提取逻辑同理 c2 = [float(val) for val in items['C2']] c3 = [float(val) for val in items['C3']] constant = [float(val) for val in items['Constant']]
可选优化
读取文件建议使用with open()语法,会自动完成文件关闭操作,避免资源泄漏,完整读取代码如下:
import csv items = dict() headers = [] with open('Items.csv', encoding='utf-8-sig') as file: reader = csv.reader(file, delimiter=',') headersRead = False for row in reader: if not headersRead: items = {header: [] for header in row} headers = row headersRead = True else: for idx, val in enumerate(row): items[headers[idx]].append(val)
内容的提问来源于stack exchange,提问作者Pelden Kinyak
相关产品推荐
相关产品推荐

