如何实现参数按规则递增的Python函数批量重复调用?
批量调用同结构自定义函数的精简方案
你不需要逐行手写上百条重复调用语句,这类参数按固定规则生成的批量操作,直接通过循环动态拼接参数即可完成,代码量可以压缩到10行以内。
核心实现逻辑
你的调用参数里,first_excel是固定传入值,剩下三个参数都遵循固定命名模板,仅和设备型号前缀、3位递增编号两个变量相关:
sheet_name格式固定为{型号}-{3位补零编号}- csv输入文件名、输出文件名仅需要根据你实际的文件命名规则,拼接对应字符串即可
注意:首次运行建议先循环打印1-2个编号拼接出的参数,和你实际的sheet名、文件名核对一致后再执行全量调用,避免参数拼接错误导致文件找不到、输出文件误覆盖等问题。
代码示例
场景1:文件命名统一(推荐先核对实际文件名)
从你给出的AAA-001到AAA-004的示例来看,大概率是写AAA-100、BBB系列示例时漏打了编号和后续字段间的下划线,所有文件实际命名规则统一,直接用以下代码即可:
# 声明需要处理的设备型号 device_list = ["AAA", "BBB"] for model in device_list: # 遍历1-100的编号,zfill(3)自动补前导零:1→"001"、10→"010"、100→"100" for num in range(1, 101): num_str = str(num).zfill(3) # 按规则拼接三个动态参数 sheet = f"{model}-{num_str}" input_csv = f"{model}{num_str}_Mirae_Performance_Lot(2022)_N1.2.csv" output_file = f"TFM_{model}{num_str}_merged_file.csv" # 执行调用 merge_data(first_excel, sheet, input_csv, output_file)
场景2:严格匹配你给出的示例命名规则
如果你的文件命名确实和示例完全一致(AAA型号编号小于100时带分隔下划线,编号100不带;BBB型号全编号都不带下划线),加个简单的分隔符判断即可:
device_list = ["AAA", "BBB"] for model in device_list: for num in range(1, 101): num_str = str(num).zfill(3) sheet = f"{model}-{num_str}" # 按规则判断是否需要加下划线分隔 separator = "_" if (model == "AAA" and num < 100) else "" input_csv = f"{model}{num_str}{separator}Mirae_Performance_Lot(2022)_N1.2.csv" output_file = f"TFM_{model}{num_str}{separator}merged_file.csv" merge_data(first_excel, sheet, input_csv, output_file)
可选优化
- 若要避免个别csv文件缺失导致程序中断,可以在调用前用
os.path.exists(input_csv)检查文件是否存在,不存在时打印提示信息跳过即可 - 这类文件合并属于IO密集型操作,如果数据量大,可以用
concurrent.futures.ThreadPoolExecutor做多线程并行处理,能大幅缩短总执行时间
内容的提问来源于stack exchange,提问作者Flora Trace
相关产品推荐
相关产品推荐

