11
使用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