繁体   English   中英

使用 Python 的 argparse 接受 0-5 形式的数字范围?

[英]Accept a range of numbers in the form of 0-5 using Python's argparse?

使用 argparse,有没有办法接受一系列数字并将它们转换为列表?

例如:

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(','))对其进行解析。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM