[英]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.