在运行时重写配置文件

时间:2018-10-19 13:39:33

标签: python python-3.x configuration-files

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

现在,我这样重写整个文件:

if ((size = elementData.length) != 0) {

我对此方法有2个顾虑:
  -可能由于错误而丢失配置
  -每次删除文件中的注释

另一种方法是拥有两个文件,其中一个文件专用于运行时修改的变量

2 个答案:

答案 0 :(得分:0)

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文件。

所有操作都在同一驱动器上执行,因此即使文件很大,也没有更多的磁盘访问权限(重命名除外)。

答案 1 :(得分:-1)

config.ini

[DEFAULT]
ServerAliveInterval = 45
Compression = yes
CompressionLevel = {somelevel}
ForwardX11 = yes

python代码

content = open('config.ini').read()
somelevel = 34
filled = content.format(**locals())
gg = ConfigParser()
gg.read_string(filled)

但是,不要不要将** locals()用于真实代码。 请尝试寻找更好的方法,这很脏。

edit:我尝试做一些简单的f字符串破解,但由于转义问题而失败。