使用argparse从python中解析文件中的字典?

时间:2016-08-25 17:53:33

标签: python argparse

我一直在使用包含变量的文件作为程序的输入,然后在运行时将其导入主程序。我正在将此系统移动到使用argparse读取文件中的输入值。当前输入变量之一是字典列表,每个字典提供给定计算的设置。

CalculationVals=[{'startx':0,'starty':0,'endx':10, 'endy':10}, {'startx':1,'starty':1,'endx':12, 'endy':12}]

然后在程序的主要部分中,循环各个CalculationVals。有没有办法使用argparse读取它,或者使用argparse方法提供此输入的更好方法?这里不依赖额外的包装是有利的。

3 个答案:

答案 0 :(得分:1)

这不是argparse的用途。它用于解析命令行参数,而不是配置文件。

看起来你的配置是JSON,除非你做了一些非常奇怪的事情并严重滥用库,argparse不知道如何解析JSON。因此,无论如何要了解import json所需的参数。在这一点上,最简单(也是最有效)的事情就是

import json

with open('/your/config/file', 'r') as f:
    config = json.loads(f.read())

答案 1 :(得分:0)

正如德米特里建议的那样,将json作为函数的参数传递不是推荐的方法。

所以,我建议你在参数中传递json文件路径而不是整个json文件。

# test_prog.py
import argparse
import json

parser = argparse.ArgumentParser()
parser.add_argument("-f","--filepath", help="json file path")
args = parser.parse_args()

with open(args.filepath, 'r') as f:
      config = json.load(f)

print config

然后使用此值来使用json lib进行读取。

如果json文件也是远程的,你可以传递url作为参数!

示例运行:

$ python test_prog.py -f ./f1.json
[{u'endy': 10, u'endx': 10, u'startx': 0, u'starty': 0}, {u'endy': 12, u'endx': 12, u'startx': 1, u'starty': 1}]

文件内容,f1.json:

[{"startx":0,"starty":0,"endx":10, "endy":10},{"startx":1,"starty":1,"endx":12, "endy":12}]

答案 2 :(得分:0)

第一个选项是直接传入参数,并为每组值调用一次脚本。目前还不清楚这是否符合您的使用案例。

./your_script.py startx=0, starty=0, endx=10, endy=10

或者,您可以使用易于解析的文件格式(如JSON或CFG),而不是直接导入python文件。

JSON文件:

{
    "CalculationVals": [{
        "startx": 0,
        "starty": 0,
        "endx": 10,
        "endy": 10
    }, {
        "startx": 1,
        "starty": 1,
        "endx": 12,
        "endy": 12
    }]
}

的Python:

import argparse
import json

parser = argparse.ArgumentParser()
parser.add_argument('file')
args = parser.parse_args()

with open(args.file) as fi:
        configs = json.load(fi)
        for values in configs['CalculationVals']:
                startx = values['startx']
                starty = values['starty']

调用脚本:     ./your_script.py config.json