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

Python运行时修改模块变量与实例并保存至模块文件的方法

如何持久保存Python模块中修改后的变量值

我明白你的需求啦——你希望程序运行后,var.py里的table实例和month变量的修改能被持久保存,下次运行程序时还能读到更新后的值对吧?

首先得理清一个关键点:当你import var时,Python会把var.py的内容加载到内存中,你后续修改的var.table和var.month其实是内存里的模块对象属性,不会自动同步回原文件。程序结束后内存释放,这些修改就消失了。要实现持久保存,你需要手动把修改后的变量写入文件。

下面给你两种可行的方案:

方案1:直接修改var.py文件(简单场景适用)

这种方式直接把更新后的变量值写入原var.py文件,但要注意:类实例不能直接写入(写入的是对象的字符串表示,下次导入会报错),所以我们需要把实例的关键属性(比如table.name)单独保存,下次启动时再重新创建实例。

修改后的代码:

  1. 更新var.py,新增table_name用来存储实例的名称:
month = "jen"
table_name = ""  # 存储table实例的name属性
table = ""       # 后续通过table_name重新创建实例
  1. 修改main.py,在修改变量后写入文件:
import header
import var
import os

# 程序启动时,从table_name恢复table实例
if var.table_name:
    var.table = header.table(var.table_name)

# 执行你的业务逻辑,修改变量
var.table = header.table(var.month)
var.month = "feb"

# 将修改后的变量写入var.py文件
var_file_path = os.path.join(os.path.dirname(__file__), 'var.py')
with open(var_file_path, 'w', encoding='utf-8') as f:
    f.write(f"month = '{var.month}'\n")
    f.write(f"table_name = '{var.table.name}'\n")
    f.write("table = ''  # 启动时通过table_name创建实例\n")

方案2:使用JSON配置文件(更安全推荐)

直接修改Python模块文件有风险——如果写入的内容语法错误,下次导入模块会直接失败。更稳妥的方式是用JSON文件存储配置变量,专门负责持久化数据。

步骤:

  1. 创建config.json文件,初始内容:
{
    "month": "jen",
    "table_name": ""
}
  1. 修改var.py,改为从JSON加载和保存配置:
import json
import os

# 配置文件路径
CONFIG_PATH = os.path.join(os.path.dirname(__file__), 'config.json')

def load_config():
    """加载配置文件"""
    with open(CONFIG_PATH, 'r', encoding='utf-8') as f:
        return json.load(f)

def save_config(config_data):
    """保存配置到文件"""
    with open(CONFIG_PATH, 'w', encoding='utf-8') as f:
        json.dump(config_data, f, indent=4)

# 加载初始配置
config = load_config()
month = config['month']
table_name = config['table_name']
table = ""  # 后续恢复实例用
  1. 修改main.py,实现修改和保存:
import header
import var

# 启动时从配置恢复table实例
if var.table_name:
    var.table = header.table(var.table_name)

# 修改变量
var.table = header.table(var.month)
var.month = "feb"

# 更新配置并保存
var.config['month'] = var.month
var.config['table_name'] = var.table.name
var.save_config(var.config)

两种方案对比

  • 方案1:无需额外文件,适合极简单的场景,但要注意避免语法错误,且只能存储可直接转为Python代码的变量类型。
  • 方案2:更安全、灵活,支持复杂的配置结构,后续扩展也方便,是生产环境更推荐的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:57:15