json to argparse, argparse to json

917 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。


json和argparse互相转换

有时候需要将训练的参数保存到文件,方便复现的时候直接加载。可以保存为json文件,这样方便不同的语言加载,和直接用肉眼查看。

保存参数:

import json
import argparse

parser = argparse.ArgumentParser()

parser.add_argument('--seed', type=int, default=98, help='seed')
parser.add_argument('--epoch', type=int, default=100, help='epoch')

args = parser.parse_args()

with open('./test_arg.json', 'wt') as f:
    json.dump(vars(args), f, indent=4). # indent意思就是json格式缩进4个space,便于肉眼查看

加载参数:

args = argparse.ArgumentParser()
args_dict = vars(args)

with open('./test_arg.json', 'rt') as f:
    args_dict.update(json.load(f))

print(args.seed)

当然也可以用yaml或者pickle,本质就是argparse保存了一个dict,只要将保存和加载的对象用于更新这个dict即可。

深入了解下其他参数

  • argparse.``ArgumentParserprog = None , usage = None , description = None , epilog = None , parents = []  , formatter_class = argparse.HelpFormatter , prefix_chars = '-'  , fromfile_prefix_chars = None , argument_default = None , conflict_handler = 'error'  , add_help =真allow_abbrev =真exit_on_error =真

  • 创建一个新ArgumentParser对象。所有参数都应作为关键字参数传递。每个参数在下面都有自己更详细的描述,但简而言之,它们是:

    • prog - 程序的名称(默认值 os.path.basename(sys.argv[0]):)
    • 用法- 描述程序用法的字符串(默认值:从添加到解析器的参数生成)
    • description - 在参数帮助之前显示的文本(默认值:无)
    • Epilog - 参数帮助后显示的文本(默认值:无)
    • 父母ArgumentParser-还应包括其参数的对象列表
    • formatter_class - 用于自定义帮助输出的类
    • prefix_chars - 可选参数前缀的字符集(默认值:'-')
    • fromfile_prefix_chars - 应读取附加参数的文件前缀字符集(默认值None:)
    • argument_default - 参数的全局默认值(默认值None:)
    • conflict_handler - 解决冲突选项的策略(通常是不必要的)
    • add_help - 向解析器添加一个-h/--help选项(默认值True:)
    • allow_abbrev - 如果缩写明确,则允许缩写长选项。(默认True:)
    • exit_on_error - 确定发生错误时 ArgumentParser 是否以错误信息退出。(默认True:)

references

docs.python.org/3/library/a…