python - 如何访问python文件中的属性并保存回文件
问题描述
我正在使用 Python 3.5 并希望将我的应用程序配置存储在 python 文件中(例如 settings.py)。
示例 settings.py 文件
ALPHA = 0.1
BETA = {}
伪代码
import settings as conf
DEFAULT_ALPHA = 0.234
NEW_BETA = { 1: 2, 2: 'Hello'}
keys = [x for x in dir(conf) if x[0] != '_']
if 'ALPHA' not in keys:
conf.ALPHA = DEFAULT_ALPHA
if 'BETA' not in keys:
conf.BETA = {}
if not conf.BETA:
conf.beta = NEW_BETA
# How to write new configuration to file?
我的问题是我将如何将新配置(settings.py)写入文件?
[[附录]]
正如其他人在评论部分(甚至答案)中指出的那样,这样做的明显方法是使用一种更常见的“结构化数据”格式:即 JSON、YML、XML 等。
我知道 json 模块(过去曾多次使用过它)。但是,我对我在 django 应用程序中看到的代码很感兴趣,它似乎是在直接编辑配置文件(django 爱好者会认出)settings.py
)。
我无法弄清楚设置是如何写回文件的,并试图复制它——因此这个问题。FWIW,JSON/YML 方法是我本来会采用的显而易见的方法(过去曾做过几次)。
所以,我的问题仍然存在 - 有没有办法加载 python 模块,修改它,然后将它(模块)保存回文件?
实际上有很多情况下这会很有用。一个这样的例子是一个 django 应用程序,它在安装时实际上会在 settings.py 中进行适当的更改 - 因此无需在INSTALLED_APPS
变量 of中添加应用程序,settings.py
也无需手动将应用程序配置添加到settings.py
.
这将有助于在 django 项目中部署新应用程序,而不必使用当前的变通方法,例如不同版本的 settings.py(例如,用于在 Dockerfile 中复制),甚至不必手动修改 settings.py 文件。
解决方案
我建议不要直接导入该配置文件,而是写入函数来加载和保存配置(使用 json):
import json
def loadConfig():
with open('config.py', 'w+') as configFile:
try:
config = json.loads(configFile.read())
except ValueError:
config = {}
except:
raise
return config
def saveConfig(config):
with open('config.py', 'w+') as configFile:
configFile.write(json.dumps(config))
config = loadConfig()
config["foo"] = "bar"
saveConfig(config)
或者只是使用一个现成的模块,它将为您处理配置文件。
推荐阅读
- javascript - 如何在 Node.JS 的一个函数中使用来自 MySQL 的响应?
- c# - .NET 进行检查算术的最快方法
- java - 通过子类的实例调用时,如何在超类方法中使用子类的静态字段?
- java - 基于角色的登录后,Spring Boot 应用程序显示“白级错误”
- google-api - Google MyBusiness API 是否有新的范围来取代 plus.business.manage
- vba - 使用 vba 删除标题上的最后一个段落标记
- javascript - 默认情况下在所有选项卡上加载 chrome 扩展
- c++ - 为什么输入流从输入的第二行中删除一些字符
- mysql - 我无法在 Windows 10 64 位中打开 mysqld.exe
- c# - Linq Group DataTable 结果(按最大值)