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

如何从另一Python文件读取配置并验证export_nova_rosterlight的列

基于配置文件指定键的列验证实现

场景说明

现有两个Python文件:

  1. 配置文件(示例命名为config.py)定义了不同导出任务对应的字段列表
  2. 验证函数所在文件包含一个基于特定列计数的验证逻辑,需要修改为基于export_nova_rosterlight键下的配置字段进行验证

配置文件代码(config.py)

dict_nova = {
    "export_nova_rosterlight":{
        "metadata_resource_id": "export_nova_rosterlight",
        "metadata_product_version" : "1.0",
        "List_Fields": [
            "data_export",
            "userID",
            "deviceName",
            "osVersion",
            "emailAddress",
            "model",
            "serialNumber"
        ]
    },
    "export_nova_export":{
        "metadata_resource_id":"Export_nova_export",
        "metadata_product_version" : "1.0",
        "List_Fields": [ 
            "data_export",
            "userMail",
            "userID",
            "deviceName",
            "emailAddress"
        ]
    }   
}

原验证函数代码

def validate_counts(df):
    distinct_mail = df.agg(F.countDistinct('emailAddress')).collect()[0][0]
    distinctdevice = df.agg(F.countDistinct('deviceName')).collect()[0][0]
    
    if 10000 <= distinct_mail <= 20000 and 5000 <= distinctdevice <= 10000:
        result = 'valid'
    else:
        result = 'invalid'
        
    return result

解决方案

步骤1:导入配置字典

在验证函数所在文件中,导入配置文件里的dict_nova:

from config import dict_nova  # 若配置文件路径不同,需调整导入路径

步骤2:修改验证函数,关联配置字段

修改后的函数会读取指定配置键下的字段列表,确保验证逻辑基于配置字段执行,同时保留灵活性:

def validate_counts(df, config_key="export_nova_rosterlight"):
    # 获取目标配置下的字段列表
    target_fields = dict_nova[config_key]["List_Fields"]
    
    # 检查验证所需字段是否存在于配置中,提前规避错误
    required_validate_fields = ["emailAddress", "deviceName"]
    for field in required_validate_fields:
        if field not in target_fields:
            raise ValueError(f"配置键[{config_key}]下未包含验证必需字段[{field}]")
    
    # 可选:仅保留配置中定义的列进行操作,严格遵循配置规则
    df_config_filtered = df.select(*target_fields)
    
    # 执行计数验证
    distinct_mail = df_config_filtered.agg(F.countDistinct('emailAddress')).collect()[0][0]
    distinct_device = df_config_filtered.agg(F.countDistinct('deviceName')).collect()[0][0]
    
    return 'valid' if 10000 <= distinct_mail <= 20000 and 5000 <= distinct_device <= 10000 else 'invalid'

代码说明

  • 配置导入:通过导入dict_nova,让验证逻辑与配置文件解耦,后续修改字段只需调整配置,无需改动验证函数核心逻辑
  • 配置键参数化:默认使用export_nova_rosterlight,也可传入其他键(如export_nova_export)实现不同配置的验证
  • 字段存在性检查:提前校验配置是否包含验证必需字段,避免运行时出现KeyError
  • 可选列筛选:通过select(*target_fields)确保仅使用配置中定义的列进行操作,严格遵循配置规则

内容的提问来源于stack exchange,提问作者user175025

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:06:33