如何将ecoinvent中的活动赋值给变量并访问其输入输出等属性
错误原因说明
database.get() 方法要求传入的参数能唯一匹配一个活动,ecoinvent中存在大量同名、不同区位的活动,仅传入活动名称无法准确定位,因此会触发ActivityDatasetDoesNotExist报错。
正确赋值ecoinvent活动变量的方法
从搜索结果直接选取
search()方法返回的结果本身就是活动对象列表,不需要再调用get()方法二次查询,直接从列表中选取目标活动即可:
# 执行搜索 search_results = ecoinvent_db.search('electricity production mix') # 先打印所有结果的序号、名称、区位,确认目标项 for idx, act in enumerate(search_results): print(idx, act['name'], act['location']) # 按序号选取目标活动,比如选取序号为3的中国区域电力组合 my_activity = search_results[3]
按条件筛选
如果需要固定筛选某一类活动,可以遍历数据库匹配属性:
# 示例:筛选中国区域的高压电力生产组合 for act in ecoinvent_db: if act['name'] == 'electricity, high voltage, production mix' and act['location'] == 'CN': my_activity = act break
已知唯一编码时使用get
如果已经明确活动的唯一code值,可直接用get()查询:
my_activity = ecoinvent_db.get(code="目标活动的唯一code值")
存取活动属性与交换数据到列表/字典的方法
list(activity.exchanges())返回的是交换对象列表,无法直接看到属性值,需要自行提取所需字段存储:
单个活动信息存储为字典
activity_info = { "name": my_activity['name'], "location": my_activity['location'], "unit": my_activity['unit'], "code": my_activity['code'], "exchanges": [] # 存储所有交换项明细 } # 提取交换项信息 for exc in my_activity.exchanges(): exc_detail = { "type": exc['type'], # 区分是生产输入、环境排放还是参考产出 "name": exc['name'], "amount": exc['amount'], "unit": exc['unit'], "product": exc.get('product', 'N/A') } activity_info["exchanges"].append(exc_detail)
如果要查看电力生产组合的具体构成,仅需要过滤type为technosphere的交换项即可。
批量活动信息存储为列表
all_elec_mix = [] # 遍历所有符合条件的电力组合活动 for act in ecoinvent_db: if act['name'] == 'electricity, high voltage, production mix': # 复用上面的单个活动属性、交换项提取逻辑 activity_info = { "name": act['name'], "location": act['location'], "exchanges": [] } for exc in act.exchanges(): activity_info["exchanges"].append({ "type": exc['type'], "name": exc['name'], "amount": exc['amount'], "unit": exc['unit'] }) all_elec_mix.append(activity_info)
内容的提问来源于stack exchange,提问作者Stücke
相关产品推荐
相关产品推荐

