argparseを使用すると、ある範囲の数値を受け入れてリストに変換する方法はありますか?例えばPythonのargparseを使用して0〜5の形式で数値の範囲を受け入れますか?
:
python example.py --range 0-5
は、そのフォームで入力コマンドライン引数いくつかの方法がありますし、で終わる:
args.range = [0,1,2,3,4,5]
も入力--range 2 = [2]
への可能性がありますか?
argparseを使用すると、ある範囲の数値を受け入れてリストに変換する方法はありますか?例えばPythonのargparseを使用して0〜5の形式で数値の範囲を受け入れますか?
:
python example.py --range 0-5
は、そのフォームで入力コマンドライン引数いくつかの方法がありますし、で終わる:
args.range = [0,1,2,3,4,5]
も入力--range 2 = [2]
への可能性がありますか?
あなたは、type
引数に独自のパーサーを書くことができます。
from argparse import ArgumentParser, ArgumentTypeError
import re
def parseNumList(string):
m = re.match(r'(\d+)(?:-(\d+))?$', string)
#^(or use .split('-'). anyway you like.)
if not m:
raise ArgumentTypeError("'" + string + "' is not a range of number. Expected forms like '0-5' or '2'.")
start = m.group(1)
end = m.group(2) or start
return list(range(int(start,10), int(end,10)+1))
parser = ArgumentParser()
parser.add_argument('--range', type=parseNumList)
args = parser.parse_args()
print(args)
~$ python3 z.py --range m
usage: z.py [-h] [--range RANGE]
z.py: error: argument --range: 'm' is not a range of number. Expected forms like '0-5' or '2'.
~$ python3 z.py --range 2m
usage: z.py [-h] [--range RANGE]
z.py: error: argument --range: '2m' is not a range of number. Expected forms like '0-5' or '2'.
~$ python3 z.py --range 25
Namespace(range=[25])
~$ python3 z.py --range 2-5
Namespace(range=[2, 3, 4, 5])
文字列引数を使用して、range(*rangeStr.split(','))
と解析するだけです。
私はそのような何かが内蔵されていることを疑います。 argparseに任意の文字列を受け入れ、それを自分自身で解析することはかなり簡単です。 – delnan