2011-04-08 614 views
10

我有一个脚本,需要取得文件名和一组key =值对。没有定义key = value对的集合。它们依赖于中传递文件Python:将通用字典作为命令行参数传递

如:

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还是我必须建立自己的解析器?

+1

解析这是大约5行代码..它真的很重要吗? – Robus 2011-04-08 18:11:25

回答

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中至少有两个参数。

+2

更简单:'dict(arg.split('=')for arg in sys.argv [2:])' – kennytm 2011-04-08 18:22:03

+0

感谢您的线索,我打算使用组合: 'parser = argparse.ArgumentParser (描述= '测试字典作为ARGS') parser.add_argument( “文件”) parser.add_argument( “字典”,NARGS = '*') ARGS = parser.parse_args() 打印ARGS 打印args.dictionary print dict([x.split('=')for x in args.dictionary]) print args.dictionary .__ class__ ' – 2011-04-08 18:24:04

+0

@KennyTM是的,那样更好。我改变了答案。 – 2011-04-08 18:24:17

0

希望这有助于而不是传递一个字典,你可以传递,一个“逃逸” JSON字符串作为命令行参数

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”

相关问题