Python遍历Files目录匹配函数处理文件,如何适配多入参函数?
代码调整方案
核心思路
原有方案只做了文件名到处理函数的映射,没有兼容不同函数的入参差异。我们改造映射表,给每个匹配项绑定对应的参数提取逻辑,调用前先按规则提取入参再传入函数即可。
完整实现代码
import os import glob import pandas as pd # 原有处理函数 def A_fct(fileA): pass def B_fct(fileB): pass def C_fct(fileC1,fileC2): pass def D_fct(fileD): pass def F_fct(files): df = pd.concat([pd.read_csv(f,sep='\t',engine="python") for f in glob.glob(files + "/*.txt")],ignore_index=True) if __name__ == "__main__": # Files文件夹路径,可按实际部署情况调整 files_root = "./Files" # 改造映射表:键为匹配的文件/文件夹名,值为(处理函数, 参数提取回调) name_to_handler = { "A.xlsx": (A_fct, lambda full_path: [full_path]), "B.txt": (B_fct, lambda full_path: [full_path]), "D.xlsx": (D_fct, lambda full_path: [full_path]), "folderC": (C_fct, lambda full_path: [ os.path.join(full_path, "filec1.txt"), os.path.join(full_path, "filec2.txt") ]), "folderF": (F_fct, lambda full_path: [full_path]) } # 遍历Files下的所有文件/文件夹 for item_name in os.listdir(files_root): item_full_path = os.path.join(files_root, item_name) # 匹配到对应处理规则才执行 if item_name in name_to_handler: func, args_getter = name_to_handler[item_name] # 按规则提取参数 args = args_getter(item_full_path) # 解包参数传入函数,自动适配单/多入参场景 func(*args)
逻辑说明
- 映射表中每个匹配项绑定的参数提取回调,会返回当前项对应的入参列表,保证和处理函数的入参数量、顺序完全匹配
- 调用函数时使用
*args解包参数列表,自动适配单入参、多入参的场景 - 后续新增其他处理规则时,只需要在
name_to_handler中新增对应条目,编写对应参数提取逻辑即可,不需要修改遍历的核心代码
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

