【发布时间】:2012-08-14 03:47:30
【问题描述】:
我正在尝试找到最 Pythonic 的方式来获取包含命令行选项的字符串:
"-t 500 -x -c 3 -d"
然后把它变成字典
{"-t":"500", "-x":True, "-c":"3", "-d": True}
UPDATE:字符串还应该能够包含 --long 选项,以及中间带破折号的单词:
"-t 500 -x -c 3 -d --long-option 456 -testing weird-behaviour"
在建议我查看 OptionParse 模块之前,请记住我不知道有效选项是什么或类似的东西,我只是想将字符串放入字典中以允许根据不同的字典对其进行修改选项。
我正在考虑的方法是使用 split() 将项目放入列表中,然后遍历列表并查找以破折号“-”开头的项目并将它们用作键,然后以某种方式到达值列表中的下一项。我遇到的问题是没有值的选项。我想过做类似的事情:
for i in range(0, len(opt_list)):
if opt_list[i][0] == "-":
if len(opt_list) > i+1 and not opt_list[i+1][0] == "-":
opt_dict[opt_list[i]] = opt_list[i+1]
else:
opt_dict[opt_list[i]] = True
但是当我这样做时,我似乎是在用 C 而不是 Python 编程......
【问题讨论】:
-
list[i][0] == '-'->lst.startswith('-')(不要使用list或dict作为变量名——这可能会导致糟糕的一天)。您也可以使用enumerate,但这可能没有太大帮助... -
感谢startswith() 指针。是的,我没有将它们用作变量名,只是在此示例中对其进行了更改以避免混淆。
-
命令行选项可以加引号吗?是否有任何
--标志可以防止后续参数被解释为标志? -
Plazgoth:我在答案中添加了一个编辑,以解释您想要的内容实际上不可能用任意选项列表明确解析(并允许值以“-”开头)
标签: python string dictionary