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

能否将Python文件中的常量导入JSON并转换为对象?

当然可行,但得先澄清一个关键点:JSON本身是纯静态的数据格式,完全不支持引入模块、执行代码这类动态操作——所以你没法直接在info.json里写C.val1这种Python表达式。不过我们可以通过Python代码来间接实现你的需求:先把abc.py里的常量提取出来,写入JSON文件,之后再把JSON转回Python对象。

具体实现步骤

1. 从abc.py中提取常量

假设你的abc.py内容是:

# abc.py
val1 = 10
val2 = 20

我们可以用Python的importlib模块导入这个模块,然后筛选出我们定义的常量(过滤掉模块自带的内置属性):

import importlib
import json

# 导入abc模块
abc_module = importlib.import_module('abc')

# 提取自定义常量:排除以下划线开头的内置属性
constants = {
    key: value
    for key, value in vars(abc_module).items()
    if not key.startswith('_')
}

2. 将常量写入info.json

接下来把提取到的常量按照你想要的键名映射(比如val1对应c1,val2对应c2),然后写入JSON文件:

# 按照需求映射键名
json_content = {
    "c1": constants['val1'],
    "c2": constants['val2']
}

# 写入JSON文件,indent参数让格式更美观
with open('info.json', 'w') as f:
    json.dump(json_content, f, indent=4)

执行这段代码后,info.json的内容会变成:

{
    "c1": 10,
    "c2": 20
}

3. 将JSON转换为Python对象

之后如果需要把JSON内容转回可直接访问的Python对象,可以用types.SimpleNamespace来实现:

import json
from types import SimpleNamespace

# 读取JSON文件内容
with open('info.json', 'r') as f:
    json_data = json.load(f)

# 转换为可通过属性访问的对象
const_obj = SimpleNamespace(**json_data)

# 现在可以像访问对象属性一样使用
print(const_obj.c1)  # 输出: 10
print(const_obj.c2)  # 输出: 20

进阶技巧:批量映射键名

如果abc.py里有大量类似valX的常量,不想手动一个个映射,可以用字符串替换来批量生成键名:

# 自动将valX映射为cX
json_content = {
    key.replace('val', 'c'): value
    for key, value in constants.items()
    if key.startswith('val')
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:30:57