所以,一个场景:
假设我将python项目放在名为' pyproj'的目录中。主文件' myproj.py'和另一个文件(' config.py')包含一些变量:
-f <file> Parse and execute <file>.
在myproj.py&#39;内,是否可以设置变量......
cfg_x = {}
cfg_y = 1031
cfg_z = 'Hello!'
...并保留设置(写入文件)?我尝试使用上面的代码执行此操作,但是如果我退出python控制台并再次运行它,变量仍会保留import config
cfg_x['example'] = 'different value'
。
答案 0 :(得分:0)
这是使用config.json的简化版本,用于您想要做的事情。请注意,这会创建格式错误的JSON,因此您可能需要编辑一些内容。
config.py通过使用标准lib 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)
在实际情况下,我通常会使用已存在的百万个Python配置库中的1个,而不是像这样的东西。以下是一个示例:https://jbasko.github.io/configmanager/
如果你使用它,你最不想修改config.py来检查文件是否已经存在而不是覆盖整个config.json。
答案 1 :(得分:0)
正如其他人所说,使用配置文件明确不是好的方式。但如果你真的想要做这种事情(毕竟,我猜你是同意的成年人),只需更换你的第一行:
from config import *
print(cfg_x)
cfg_x['example'] = 'new value'
print(cfg_x)
产生以下输出:
{}
{'example': 'new value'}