Python中如何切换参数调用对应函数批量处理文件夹下的文件
实现方案
核心思路是抽离重复逻辑,把可变的数据源路径、fct1实现作为可配置参数传入,避免写两套完全重复的处理函数,切换时仅需修改配置即可。
步骤1:导入依赖并抽离公共处理逻辑
把所有可变参数从业务逻辑中剥离,用工厂函数根据传入的配置生成对应版本的处理函数:
import os import pandas as pd # 提前导入两个版本的fct1,避免运行时重复导入 from fcts1 import fct1 as fct1_v1 from fcts2 import fct1 as fct1_v2 def create_processors(csv_path: str, fct1_impl): """根据传入的配置生成对应版本的A/B/C处理函数""" def A_fct(fileA): df = pd.read_csv(csv_path) dfA = pd.read_csv(fileA, skiprows=2, sep=r"\s*\|\s*") fct1_impl() def B_fct(fileB): df = pd.read_csv(csv_path) dfB = pd.read_excel(fileB) fct1_impl() def C_fct(fileC): df = pd.read_csv(csv_path) dfC = pd.read_excel(fileC) fct1_impl() # 返回处理函数映射,直接可用于后续遍历调用 return { "A": A_fct, "B": B_fct, "C": C_fct }
步骤2:定义版本配置映射
把两个版本的参数提前配置好,后续仅需指定版本号即可切换:
MODE_CONFIG = { # 版本1:用File1.csv + fcts1的fct1 "v1": { "csv_path": "File1.csv", "fct1": fct1_v1 }, # 版本2:用File2.csv + fcts2的fct1 "v2": { "csv_path": "File2.csv", "fct1": fct1_v2 } }
步骤3:按需选择版本执行业务逻辑
if __name__ == "__main__": # 这里按需修改版本号即可切换,填v1或v2 USE_MODE = "v1" # 也可以用命令行参数动态传版本,不用改代码,示例如下: # import argparse # parser = argparse.ArgumentParser() # parser.add_argument("--mode", type=str, default="v1", choices=["v1", "v2"]) # args = parser.parse_args() # USE_MODE = args.mode # 加载对应版本配置 config = MODE_CONFIG[USE_MODE] # 生成对应版本的处理函数映射 name_to_func = create_processors(**config) # 原有的遍历逻辑,注意要拼接完整文件路径避免读不到文件 files_path = "./Files" for file_name in os.listdir(files_path): file_prefix = file_name.split('.')[0] if file_prefix in name_to_func: full_file_path = os.path.join(files_path, file_name) name_to_func[file_prefix](full_file_path)
以上方案不需要维护两套完全重复的A/B/C处理函数,后续修改业务逻辑仅需修改create_processors里的对应函数即可,切换版本时仅需修改USE_MODE的值,或者运行时通过命令行参数指定即可。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

