如何将任意选项字符串解析为Python字典

2023-11-24

我试图找到最 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 编程......


要正确处理引号内的空格,您可以使用shlex.split():

import shlex

cmdln_args = ('-t 500 -x -c 3 -d --long-option 456 '
              '-testing "weird -behaviour" -m "--inside"')

args = shlex.split(cmdln_args)
options = {k: True if v.startswith('-') else v
           for k,v in zip(args, args[1:]+["--"]) if k.startswith('-')}

from pprint import pprint
pprint(options)

Output

{'--inside': True,
 '--long-option': '456',
 '-c': '3',
 '-d': True,
 '-m': True,
 '-t': '500',
 '-testing': 'weird -behaviour',
 '-x': True}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将任意选项字符串解析为Python字典 的相关文章

随机推荐