首页 > 解决方案 > 在运行时重写配置文件

问题描述

我在 python3.7.1 中通过 configparser 使用配置文件。
我想在运行时修改的文件之一中有一个变量,我想知道最好的方法是什么。

现在我将整个文件重写为:

config = configparser.ConfigParser()
config.read('config.ini')
config['Categorie']['new_variable'] = variable
with open('config.ini', 'w') as configfile:
    config.write(configfile)

我对这种方法有两个担忧:

标签: pythonpython-3.xconfiguration-files

解决方案


configparser不存储评论,所以除非你使用这个模块,否则你会被困在那个上面......或者你可以提取评论并在之后将它们重新注入文件中(丢失评论的位置,但保留内容)

为避免在发生错误(磁盘已满或其他)时丢失配置,您可以另存为另一个名称,删除当前文件并重命名。

conf_file = 'config.ini'
with open(conf_file+'.bak', 'w') as configfile:
    config.write(configfile)
if os.path.exists(conf_file):
   os.remove(conf_file)  # else rename won't work when target exists
os.rename(conf_file+'.bak',conf_file)

这种方法是安全的。如果无法写入文件,则不会破坏先前的文件。最坏的情况是(如果有人在删除原始文件的确切时刻拔掉插头).bak文件(具有适当的新内容)仍然存在。

另一种方法是重命名现有的 .ini 文件,写入新文件,并在文件成功写入后删除旧的 .ini 文件。

所有操作都在同一个驱动器上执行,因此即使文件很大,也不会再访问磁盘(重命名除外)。


推荐阅读