需求:可以从命令行导入参数,也可以从.yaml配置文件导入参数,但前者优先级更高。即当某参数值同时存在于命令行导入、.yaml文件中时,使用前者赋值。写了一个小脚本。
import argparse, yaml, os
# 从命令行导入参数
parser = argparse.ArgumentParser()
parser.add_argument('--test_arg1')
args = parser.parse_args(parser)
# 从.yaml配置文件导入命令行没有的参数
with open(os.path.join('../configs', 'model.yaml'), 'r') as f: # 改成自己的.yaml路径
config = yaml.load(f, yaml.FullLoader)
for key in config:
if(hasattr(args, key) == False): # 只有当命令行未传入该参数, 才运行.yaml传入
setattr(args, key, config[key])
如果想让.yaml配置文件有更高的参数覆盖导入优先级,直接将代码中的?if(hasattr(args, key) == False) 这条语句去掉就好了