Parse Non-pre-defined Argument
Is there any library that can parse random key value pairs in sys.argv in Python? For example: python run.py --v1 k1 --v2 k2 --v3 k3 Should return me a dictionary like {v1->k1
Solution 1:
It's kind of hacky, but you do have this:
import argparse
import collections
parser = argparse.ArgumentParser()
known, unknown_args = parser.parse_known_args()
unknown_options = collections.defaultdict(list)
key = None
forargin unknown_args:
ifarg.startswith('--'):
key = arg[2:]
else:
unknown_options[key].append(arg)
Solution 2:
d = {}
for i,argin enumerate(sys.argv):
ifarg.startswith("--"):
d[arg[2:]] = sys.argv[i+1]
print d
Solution 3:
In a newer Python that uses dictionary comprehension you could use a one liner like this:
ll = sys.argv[1:]
args = {k[2:]:v for k,v inzip(ll[::2], ll[1::2])}
# {'v1': 'k1', 'v2': 'k2', 'v3': 'k3'}
It doesn't have any flexibility in case your user screws up the pairing, but it would be a quick start.
A generator could be used to pop pairs of strings off the sys.argv[1:]
. This would be a good place to build in flexibility and error checking.
deffoo(ll):
ll = iter(ll)
while ll:
yield ll.next()[2:], ll.next()
{k:v for k,v in foo(ll)}
Post a Comment for "Parse Non-pre-defined Argument"