我有一个脚本需要包含文件名和一组key = value对。未定义键=值对的集合。它们依赖于传入的文件。
例如:
Script.py file1 bob=1 sue=2 ben=3 # file 1 needs bob, sue, and ben
Script.py file2 mel=1 gorge=3 steve=3 # file 2 needs mel, gorge, and steve
这是否可以使用argparse / optparse或者我是否必须构建自己的解析器?
答案 0 :(得分:15)
这应该很容易解析自己。由于事先不知道密钥,因此使用帮助程序库会很复杂。文件名在sys.argv [1]中。您可以使用以“=”字符分隔的字符串列表构建字典作为分隔符。
import sys
filename = sys.argv[1]
args = dict([arg.split('=', maxsplit=1) for arg in sys.argv[2:]])
print filename
print args
输出:
$ Script.py file1 bob=1 sue=2 ben=3
file1
{'bob': '1', 'ben': '3', 'sue': '2'}
这是它的要点,但你可能需要更健壮的键值对解析,而不仅仅是分割字符串。另外,在尝试提取文件名之前,请确保sys.argv
中至少有两个参数。
答案 1 :(得分:0)
希望这会有所帮助,而不是通过一个词典,你可以通过"逃脱" json string作为命令行参数
import optparse
import json
parser = optparse.OptionParser()
parser.add_option("-t", "--test", dest="test", action="store", type="string")
options, _ = parser.parse_args()
my_dict = json.loads(options.test)
print my_dict['key1']
然后使用它:
python test.py -t "{\"key1\":\"value1\",\"key2\":\"value2\"}"
这将输出" value1"
答案 2 :(得分:0)
这里是一个例子:
# runline argument is : ./filename fname=sameer sname=ali age=29
import sys
l = sys.argv[1:]
print(l)
l = ['fname = sameer','sname = ali','age = 29']
for i in l:
runarg = i.split('=')
d[runarg[0]] = runarg[1]
print(d)
{'fname': 'sameer', 'sname': 'ali', 'age': '29'}
print(sys.argv [1:]
ouput: ['fname=sameer', 'sname=ali', 'age=29']
newlist = [x中的x的x.split('=')] 打印(新列表)
output: [['fname', 'sameer'], ['sname', 'ali'], ['age', '29']]
newdict = dict(newlist)
print(newdict)
output: {'fname': 'sameer', 'sname': 'ali', 'age': '29'}