Python如何将CSV文件每行数据导入类生成可调用实例
问题
开发面向对象Python程序时,需要将CSV文件的每一行映射为类的实例,作为后续可调用的变量,受项目限制必须采用该方式实现。
解决方案
你提供的参考代码中已经包含成熟的实现逻辑,可直接复用或按需拆分:
核心映射逻辑
利用csv.DictReader将CSV每行转换为字段字典,再将对应字段传入类构造函数生成实例,核心逻辑如下:
import csv # 你的Actor类定义 class Actor: def __init__(self, name, c, s, x, model, r=1.0): self.name = name self.c = c # 能力值,0-1之间的浮点数 self.s = s # 显著性,0-1之间的浮点数 self.x = x # 立场数值 self.model = model self.r = r # 风险规避系数,0.5-2之间的浮点数
配套CSV格式要求
CSV第一行必须为表头,和类初始化参数对应,示例:
Actor,Capability,Salience,Position 美国,0.8,0.9,5 欧盟,0.7,0.8,3 中国,0.9,0.9,7
加载代码实现
def load_actors_from_csv(csv_path, model): actor_list = [] # 兼容Python3的写法,替换原有废弃的rU模式 with open(csv_path, 'r', encoding='utf-8', newline='') as f: reader = csv.DictReader(f) for row in reader: # 字段类型转换后实例化 new_actor = Actor( name = row['Actor'], c = float(row['Capability']), s = float(row['Salience']), x = float(row['Position']), model = model ) actor_list.append(new_actor) return actor_list
实例调用方式
如果直接复用你提供的BDMScholzModel封装逻辑,调用会更简单:
# 直接从CSV加载整个模型,自动生成所有Actor实例 model = BDMScholzModel.from_csv_path("你的数据文件路径.csv") # 三种调用实例的方式 # 1. 按名字获取指定实例 us_actor = model.actor_by_name("美国") # 2. 用[]运算符直接取值 eu_actor = model["欧盟"] # 3. 遍历所有实例 for actor in model.actors: print(actor.name, actor.x, actor.c)
原有代码Python3兼容修改
你提供的参考代码是Python2版本,需要修改三处语法才能在Python3环境运行:
- 所有
print xxx语句改为print(xxx) open(csv_path, 'rU')改为open(csv_path, 'r', encoding='utf-8', newline='')- 类定义的
class Actor(object):可简化为class Actor:(不修改也兼容)
内容的提问来源于stack exchange,提问作者rulesforpower
相关产品推荐
相关产品推荐

