Python导入py文件修改变量后如何永久保存修改到原文件?
核心原因
Python导入模块时,仅会在加载阶段将磁盘上的源文件内容读取到内存中运行。你对user.coin的赋值操作,修改的只是内存里的模块属性,不会对磁盘上的user.py源文件做任何写入,程序退出后内存数据释放,修改自然不会持久化。
实现方法
方法1:直接修改user.py源文件(完全匹配你的需求)
通过文本读写+正则匹配替换coin的赋值行,就能把更新后的值直接写入源文件,下次导入时就会读取到新值。
在你的运行脚本中加入写文件逻辑即可:
import user import re print(user.coin) # 输出 100 # 更新内存中的变量值 new_val = 50 user.coin = new_val # 把新值写回user.py源文件 with open("user.py", "r", encoding="utf-8") as f: file_content = f.read() # 正则匹配coin的赋值行并替换 updated_content = re.sub(r'coin\s*=\s*\d+', f'coin = {new_val}', file_content) with open("user.py", "w", encoding="utf-8") as f: f.write(updated_content)
运行后打开user.py就能看到文件内容已经更新为coin = 50。
注意:该方案仅适合结构简单的单文件场景,如果
user.py内逻辑复杂,正则替换存在误改其他代码的风险,稳定性不足。
方法2:配置文件持久化(推荐的常规做法)
直接修改源码文件不是工程上的常规操作,更合理的方案是把需要动态调整的数值存在独立的配置文件中,源码只负责读写配置,既不会破坏源文件结构,稳定性也更高。
示例实现:
- 新建
config.json存储动态变量:
{ "coin": 100 }
- 修改
user.py,实现配置读写逻辑:
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): with open(CONFIG_PATH, "w", encoding="utf-8") as f: json.dump(config, f) def set_coin(value): config = _load_config() config["coin"] = value _save_config(config) # 模块加载时读取初始值 coin = _load_config()["coin"]
- 业务代码中修改变量:
import user print(user.coin) # 输出 100 user.set_coin(50)
修改后的值会永久存在config.json中,下次启动程序导入user时,会自动读取到更新后的50,不会出现修改丢失的问题。
内容的提问来源于stack exchange,提问作者Anirudh Singh
相关产品推荐
相关产品推荐

