当前位置:  开发笔记 > 编程语言 > 正文

使用变量关键字作为可选参数名称与python argparse

如何解决《使用变量关键字作为可选参数名称与pythonargparse》经验,为你挑选了1个好方法。

我正在使用argparse作为我正在编写的python脚本.该脚本的目的是处理存储表格数据的大型ascii文件.该脚本只为我编写的类提供了一个方便的前端,允许在表格数据上进行任意数量的即时剪切.在类中,用户可以传入一个变量名关键字参数,其中包含绑定到变量的两元素元组.元组定义任何列的下限和上限,其名称对应于variable-name关键字.例如:

reader = AsciiFileReducer(fname, mass = (100, float("inf")), spin = (0.5, 1))

然后,此读取器实例将忽略输入fname的所有行,但质量> 1000.5 那些行除外.输入fname可能有许多其他列,但只有质量旋转会对它们进行切割.

我希望我写的脚本保留此功能,但我不知道如何允许使用argparse.add_argument添加带有变量名称的参数.我的类允许任意数量的可选参数,每个参数都有未指定的名称,其中为名称选择的字符串本身就是有意义的.python的**kwargs特性使这成为可能.argparse有可能吗?



1> hpaulj..:

通过argparse接受任意键:值对的问题已经出现过.例如:

使用带有**kwargs参数的函数的argparse

这有几个很长的答案与早期问题的链接.

另一种选择是获取一个字符串并使用JSON解析它.

但这里有一个快速选择nargs,以及append动作类型:

parser=argparse.ArgumentParser()
parser.add_argument('-k','--kwarg',nargs=3,action='append')

一个示例输入,生成一个包含列表列表的命名空间:

args=parser.parse_args('-k mass 100 inf -k spin 0.5 1.0'.split())

Namespace(kwarg=[['mass', '100', 'inf'], ['spin', '0.5', '1.0']])

它们可以转换为带有以下表达式的字典:

vargs={key:(float(v0),float(v1)) for key,v0,v1 in args.kwarg}

可以传递给你的函数:

foo(**vargs)
{'spin': (0.5, 1.0), 'mass': (100.0, inf)}

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有