如何将多份Excel文件打包为单个参数传入Python函数?
解决方案
一、生成parameter_group的几种实现方式
1. 使用字典(最灵活易读)
在主脚本中一次性读取所有Excel文件,将它们存入带语义键名的字典:
import pandas as pd # 主脚本中读取文件并打包 parameter_group = { 'first_data': pd.read_excel('para/first.xlsx', sheet_name='Sheet1'), 'second_data': pd.read_excel('para/second.xlsx', sheet_name='Sheet1'), # 按需添加其他文件 } # 调用函数 import function function.calculate(parameter_group)
同时修改function.py中的calculate函数,从字典中提取数据:
# function.py def calculate(parameter_group): file1 = parameter_group['first_data'] file2 = parameter_group['second_data'] # 原计算逻辑保持不变,仅调整数据获取方式 ...
2. 使用元组(轻量简洁)
如果不需要语义键名,按固定顺序将DataFrame打包成元组:
# 主脚本 parameter_group = ( pd.read_excel('para/first.xlsx', sheet_name='Sheet1'), pd.read_excel('para/second.xlsx', sheet_name='Sheet1'), # 其他文件 ) function.calculate(parameter_group)
修改function.py的函数实现:
def calculate(parameter_group): file1, file2, ... = parameter_group # 按元组顺序解包 ...
3. 使用数据类(结构化更强)
需要清晰的参数结构时,用dataclasses定义结构化参数组:
# 主脚本 from dataclasses import dataclass import pandas as pd @dataclass class ParameterGroup: first_data: pd.DataFrame second_data: pd.DataFrame # 定义其他需要的DataFrame字段 parameter_group = ParameterGroup( first_data=pd.read_excel('para/first.xlsx', sheet_name='Sheet1'), second_data=pd.read_excel('para/second.xlsx', sheet_name='Sheet1'), ) function.calculate(parameter_group)
修改function.py的函数实现:
def calculate(parameter_group): file1 = parameter_group.first_data file2 = parameter_group.second_data ...
二、转为.pkl格式确实能大幅提升读取速度
Excel读取需要解析格式、公式、样式等复杂内容,而.pkl是Python专属的二进制序列化格式,直接存储DataFrame的内存结构,读取时无需额外解析,速度通常是Excel读取的数倍甚至几十倍。
转存为pkl的方法(仅需执行一次,文件更新时重新执行)
import pandas as pd # 读取Excel并转存为pkl pd.read_excel('para/first.xlsx', sheet_name='Sheet1').to_pickle('para/first.pkl') pd.read_excel('para/second.xlsx', sheet_name='Sheet1').to_pickle('para/second.pkl')
后续读取pkl的方式
# 主脚本中读取pkl并打包 parameter_group = { 'first_data': pd.read_pickle('para/first.pkl'), 'second_data': pd.read_pickle('para/second.pkl'), }
注意:pkl文件仅支持Python环境读取,若需跨语言交互不适用;Excel文件内容更新后,需重新生成对应的pkl文件。
内容的提问来源于stack exchange,提问作者Song_Rui123
相关产品推荐
相关产品推荐

