如何使用Brightway ExcelImporter将多份Excel文件导入同一数据库?
如何用Brightway的ExcelImporter将多个Excel工作簿导入同一新数据库
你说得没错,ExcelImporter确实一次只能处理单个工作簿/工作表,但咱们可以通过分步骤处理、合并数据的方式,把act1.xlsx和act2.xlsx里的活动都导入到同一个new_db数据库中。下面是具体的实现方案:
核心思路
分别实例化ExcelImporter处理每个工作簿,完成策略应用、数据库匹配等预处理后,将两个Importer的活动数据合并,再写入目标数据库;或者直接分两次将数据追加到同一个数据库中。
完整代码示例
from brightway2 import ExcelImporter, Database # 处理第一个工作簿 act1.xlsx fp_act1 = "act1.xlsx" ei1 = ExcelImporter(fp_act1) ei1.apply_strategies() # 应用默认数据清洗/格式化策略 ei1.match_database(fields=['name']) # 匹配已有数据库中的活动(按需调整字段) # 可选:查看数据统计,确认预处理结果 print("处理act1后的统计:") ei1.statistics() # 处理第二个工作簿 act2.xlsx fp_act2 = "act2.xlsx" ei2 = ExcelImporter(fp_act2) ei2.apply_strategies() ei2.match_database(fields=['name']) print("\n处理act2后的统计:") ei2.statistics() # 创建或获取目标数据库 new_db try: new_db = Database("new_db") except ValueError: # 如果数据库未注册,先完成注册 new_db = Database("new_db") new_db.register() # 方法1:合并两个Importer的活动数据后一次性写入 combined_activities = ei1.data + ei2.data new_db.write(combined_activities) # 方法2:分两次将数据追加到同一数据库(二选一即可) # ei1.write_database("new_db") # ei2.write_database("new_db") print("\n数据导入完成,可查看new_db数据库确认结果")
关键注意事项
- 活动ID唯一性:确保两个工作簿中的活动
code字段(唯一标识符)不重复,否则后导入的活动会覆盖先导入的。如果存在重复ID,可以添加自定义策略处理(比如给重复ID加后缀)。 - 策略自定义:如果默认策略不满足需求,可以在
apply_strategies()之后添加自定义策略函数,比如ei1.strategies.append(your_custom_strategy)。 - 数据校验:每次预处理后调用
statistics()方法,查看活动数量、未匹配的交换项等信息,提前排查问题。
内容的提问来源于stack exchange,提问作者MPa
相关产品推荐
相关产品推荐

