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

发布于 2024-11-17 14:33:47 字数 241 浏览 2 评论 0原文

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

例如:

python example.py --range 0-5

是否有某种方法以该形式输入命令行参数并最终得到:

args.range = [0,1,2,3,4,5]

并且还可以输入 --range 2 = [2]

Using argparse, is there a way to accept a range of numbers and convert them into a list?

For example:

python example.py --range 0-5

Is there some way input a command line argument in that form and end up with:

args.range = [0,1,2,3,4,5]

And also have the possibility to input --range 2 = [2]?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一向肩并 2024-11-24 14:33:47

您可以在 type 参数中编写自己的解析器,例如

from argparse import ArgumentParser, ArgumentTypeError
import re

def parseNumList(string):
    m = re.match(r'(\d+)(?:-(\d+))?
~$ 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])
, 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)

You could just write your own parser in the type argument, e.g.

from argparse import ArgumentParser, ArgumentTypeError
import re

def parseNumList(string):
    m = re.match(r'(\d+)(?:-(\d+))?
~$ 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])
, 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)
紫竹語嫣☆ 2024-11-24 14:33:47

您可以只使用字符串参数,然后使用 range(*rangeStr.split(',')) 解析它。

You can just use a string argument and then parse it with range(*rangeStr.split(',')).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文