繁体   English   中英

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

[英]parsing a dictionary from file in python using argparse?

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

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

然后在程序的主要部分中,将各个CalculationVals进行循环。 有没有一种方法可以使用argparse进行读取,或者有更好的方法可以使用argparse方法提供此输入? 在此不依赖附加包装是有利的。

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

看起来您的配置使用的是JSON,除非您做的事情很怪异并且严重滥用了该库,否则argparse不知道如何解析JSON。 因此,要了解参数,无论如何都需要import json 在那一点上,最简单(最有效)的事情是

import json

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

正如Dmitry建议的那样,不建议将json作为参数传递给function。

因此,我建议您在参数中传递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}]

第一种选择是直接传递参数,并为每组值调用一次脚本。 尚不清楚是否满足您的用例。

./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
    }]
}

蟒蛇:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM