2016-11-10 1 views
0

У меня есть следующий питона argparse парсер:цикл по аргументам в питона парсер

pointparser = argparse.ArgumentParser(add_help=False) 
pointparser.add_argument("-a", "--a_value", default="NaN", nargs="?", 
         type=float) 
pointparser.add_argument("-b", "--b_value", default="NaN", nargs="?", 
         type=float) 
... 
pointparser.add_argument("-j", "--j_value", default="NaN", nargs="?", 
         type=float) 
data_point = pointparser.parse_args(parameterlist) 
datapoint=[data_point.a_value, data_point.b_value, data_point.c_value, 
      data_point.d_value, data_point.e_value, data_point.f_value, 
      data_point.g_value, data_point.h_value, data_point.i_value, 
      data_point.j_value] 

Можно ли перебрать аргументы а-у и непосредственно хранить их в списке. Таким образом, я мог бы оставить количество аргументов открытым, то есть идти только -c или даже -k

+0

ли вам на самом деле заботиться о них был назван, б, в и т.д., или вы просто хотите, чтобы пользователь для возможности запуска, например 'python yourthing.py один two three' и получить список' ['one', 'two', 'three'] '? – jonrsharpe

+0

Вы действительно не должны иметь одну переменную 'datapoint' и другую' data_point'. –

+0

«Нарги» немного странно. Кажется, нет никаких причин указывать параметры без аргумента, так как он выполняет то же самое, что вообще не указывать. – chepner

ответ

1
import argparse 
import math 

pointparser = argparse.ArgumentParser(add_help=False) 
pointparser.add_argument("-a", "--a_value", default="NaN", nargs="?", 
         type=float) 
pointparser.add_argument("-b", "--b_value", default="NaN", nargs="?", 
         type=float) 
pointparser.add_argument("-j", "--j_value", default="NaN", nargs="?", 
         type=float) 
data_point = pointparser.parse_args() 
datapoint = [value for key, value in sorted(vars(data_point).items()) 
      if not math.isnan(value)] 
print(datapoint) # [1.0, 2.0] 
Смежные вопросы