正如指出的轻微改变我评论,'解析前的完整描述'不清楚。
但我想到它有可能创建一个与2d阵列。我可以使用nargs=3
指定3列,并使用action='append'
收集多个子列表中的输入。当然type
指定它是int还是float。
In [27]: p=argparse.ArgumentParser()
In [28]: p.add_argument('-a',action='append',nargs='+',type=int)
Out[28]: _AppendAction(option_strings=['-a'], dest='a', nargs='+', const=None, default=None, type=<class 'int'>, choices=None, help=None, metavar=None)
In [29]: args=p.parse_args('-a 1 2 3 -a 4 5 6 -a 7 8 9'.split())
In [30]: args
Out[30]: Namespace(a=[[1, 2, 3], [4, 5, 6], [7, 8, 9]])
In [31]: np.array(args.a)
Out[31]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
如果我没有合适的列数,它会投诉。所有它不能控制的是行数;但是我可以在创建后轻松检查数组的形状。
用这个append
在action
中创建数组没有任何意义。即使使用1d输入,在解析过程中执行np.array
调用也没有什么优势。解析后按摩(并测试)args
值是非常好的做法。
虽然要将数组值放入一个CSV文件中,并且通过指定该文件的名称会更好。真的不是为了输入大量的值。这不是一个通用的文件解析器。命令行控制你的代码的行为。
你会在哪里指定这个'complete description'?在命令行中,还是在'add_argument'设置中?举一个更详细的例子。 – hpaulj