You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用argparse将JSON文件转换为可调用的解析器格式?

解决方法

你不需要用ArgumentParser实例来存储配置——它是用来解析命令行参数的,而你要的是把JSON数据转成可以用点语法访问的对象,直接用argparse.Namespace就够了。

正确代码示例

import json
from argparse import Namespace

with open("model_args.json", 'r') as f:
    model_json = json.load(f)

# 将JSON字典转换为Namespace对象,直接支持点语法访问
model_args = Namespace(**model_json)

# 测试访问
print(model_args.model_name_or_path)  # 输出: microsoft/layoutlmv3-base
print(model_args.tokenizer_name)      # 输出: None
print(model_args.use_auth_token)      # 输出: False

为什么原有代码不对?

你创建的model_args = argparse.ArgumentParser()是参数解析器对象,不是存储参数的容器。真正用来存参数的是Namespace类——它就是argparse解析命令行后返回的对象类型,刚好适配你用点语法访问配置的需求。

(可选)结合命令行参数+JSON配置

如果你需要同时支持命令行传参和JSON配置(比如命令行参数优先级更高),可以这么做:

import json
import argparse

# 先定义和JSON键对应的命令行参数
parser = argparse.ArgumentParser()
parser.add_argument("--model_name_or_path", default="default-model")
parser.add_argument("--config_name", default=None)
parser.add_argument("--tokenizer_name", default=None)
parser.add_argument("--cache_dir", default=None)
parser.add_argument("--model_revision", default="main")
parser.add_argument("--use_auth_token", action="store_true")

# 解析命令行参数
args = parser.parse_args()

# 加载JSON配置,只覆盖命令行未指定的参数
with open("model_args.json", 'r') as f:
    model_json = json.load(f)
    for key, value in model_json.items():
        if getattr(args, key) == parser.get_default(key):
            setattr(args, key, value)

# 现在args同时包含命令行参数和JSON配置
print(args.model_name_or_path)

内容的提问来源于stack exchange,提问作者4daJKong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:37:07