Python:将通用字典作为命令行参数传递

2024-05-16 14:28:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个需要以文件名和一组key=value对命名的脚本。未定义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,这可能吗?还是我必须构建自己的解析器?


Tags: andkeypyvalue文件名script命名file
2条回答

希望这有帮助,而不是传递dict,您可以传递一个“转义”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”

这应该很容易分析你自己。由于事先不知道密钥,使用helper库会很复杂。文件名在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中至少有两个参数。

相关问题 更多 >