在python中,是否可以设置局部模块的变量并将其保存到文件中?



所以,一个场景:

假设我的 python 项目在一个名为"pyproj"的目录中。有一个主文件"myproj.py"和另一个包含一些变量的文件("config.py"(:

cfg_x = {}
cfg_y = 1031
cfg_z = 'Hello!'

在"myproj.py"内部,是否可以设置变量...

import config
cfg_x['example'] = 'different value'

。并设置了该保留(写入文件(?我尝试使用上面的代码执行此操作,但是如果我退出 python 控制台并再次运行它,变量仍然保持{}

下面是使用 config.json 的简化版本,用于您想要执行的操作。 请注意,这会产生格式错误的 JSON,因此您可能需要进行一些编辑。

config.py 通过使用标准库 JSON 写入文件,从 config python dict 创建 config.json 文件。

import json
config = {"cfg_x": {"example": "old value"}, "cfg_y": 1031, "cfg_Z": "Hello"}
with open('config.json', 'w') as file:
    json.dump(config, file)

创建的文件

~/Desktop/octocat » cat config.json                                                          
{"cfg_x": {"example": "old value"}, "cfg_y": 1031, "cfg_Z": "Hello"}%                                                                     (venv1)

myproj.py 打开时,config.json 读取模式"r"更改嵌套键并写入文件。

import json
with open('config.json', 'r') as file:
    config = json.load(file)
config["cfg_x"]["example"] = "different value"
with open('config.json', 'w') as file:
    json.dump(config, file)

修改后的文件。

~/Desktop/octocat » cat config.json                                                          
{"cfg_x": {"example": "different value"}, "cfg_y": 1031, "cfg_Z": "Hello"}%                                                              (venv1)

在实际生产场景中,我通常会使用已经存在的 100 万个 Python 配置库,而不是这样的东西。下面是一个示例:https://jbasko.github.io/configmanager/

如果你使用它,你想要修改的最低限度 config.py 检查文件是否已经存在,而不是覆盖整个config.json。

正如其他人所说,这显然不是使用配置文件的好方法。但是如果你真的想做这种事情(毕竟,我猜你是一个同意的成年人(,只需替换你的第一行:

from config import *
print(cfg_x)
cfg_x['example'] = 'new value'
print(cfg_x)

生成以下输出:

{}
{'example': 'new value'}

最新更新