You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:57:02