解析非预定义的参数

时间:2014-02-20 22:22:02

标签: python argparse

是否有任何库可以在Python中解析sys.argv中的随机键值对?

例如:

 python run.py --v1 k1 --v2 k2 --v3 k3

应该给我一个字典,如{v1-> k1,v2-> k2,v3-> k3}。在编译时我不知道'v'会是什么。

谢谢!

厄尔本

3 个答案:

答案 0 :(得分:0)

d = {}
for i,arg in enumerate(sys.argv):
    if arg.startswith("--"):
        d[arg[2:]] = sys.argv[i+1]

print d

答案 1 :(得分:0)

这有点hacky,但你确实有这个:

import argparse
import collections
parser = argparse.ArgumentParser()
known, unknown_args = parser.parse_known_args()

unknown_options = collections.defaultdict(list)
key = None
for arg in unknown_args:
    if arg.startswith('--'):
        key = arg[2:]
    else:
        unknown_options[key].append(arg)

答案 2 :(得分:0)

在使用字典理解的较新的Python中,你可以像这样使用一个衬里:

ll = sys.argv[1:]
args = {k[2:]:v for k,v in zip(ll[::2], ll[1::2])}
# {'v1': 'k1', 'v2': 'k2', 'v3': 'k3'}

如果您的用户搞砸了配对,它没有任何灵活性,但这将是一个快速的开始。

可以使用生成器弹出sys.argv[1:]之外的字符串对。这将是建立灵活性和错误检查的好地方。

def foo(ll):
    ll = iter(ll)
    while ll:
        yield ll.next()[2:], ll.next()
{k:v for k,v in foo(ll)}