栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使argparse从带有选项而不是前缀的文件中读取参数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使argparse从带有选项而不是前缀的文件中读取参数

您可以通过使用

argparse.Action
打开文件,解析文件内容然后添加参数的自定义方法来解决此问题。

例如,这将是一个非常简单的操作:

class LoadFromFile (argparse.Action):    def __call__ (self, parser, namespace, values, option_string = None):        with values as f: # parse arguments in the file and store them in the target namespace parser.parse_args(f.read().split(), namespace)

您可以这样使用:

parser = argparse.ArgumentParser()# other argumentsparser.add_argument('--file', type=open, action=LoadFromFile)args = parser.parse_args()

然后,结果中的名称空间

args
还将包含从文件中加载的任何配置,其中该文件包含与命令行(例如
--foo 1 --bar 2
)语法相同的参数。

如果您需要更复杂的解析,还可以先分别解析文件内配置,然后有选择地选择应该接管的值。例如,由于按照指定的顺序对参数进行了评估,因此防止文件中的配置覆盖命令行上明确指定的值可能是有意义的。这将允许使用配置文件作为默认值:

def __call__ (self, parser, namespace, values, option_string=None):    with values as f:        contents = f.read()    # parse arguments in the file and store them in a blank namespace    data = parser.parse_args(contents.split(), namespace=None)    for k, v in vars(data).items():        # set arguments in the target namespace if they haven’t been set yet        if getattr(namespace, k, None) is not None: setattr(namespace, k, v)

当然,您还可以使文件读取稍微复杂一些,例如首先从JSON读取。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/668131.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号