正如指出的輕微改變我評論,'解析前的完整描述'不清楚。
但我想到它有可能創建一個與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