如何从另一Python文件读取配置并验证export_nova_rosterlight的列
基于配置文件指定键的列验证实现
场景说明
现有两个Python文件:
- 配置文件(示例命名为
config.py)定义了不同导出任务对应的字段列表 - 验证函数所在文件包含一个基于特定列计数的验证逻辑,需要修改为基于
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
相关产品推荐
相关产品推荐

