我正在通过python3.7.1。中的configparser使用配置文件。
我在一个要在运行时修改的文件中有一个变量,我想知道这样做的最佳方法是什么。
现在,我这样重写整个文件:
if ((size = elementData.length) != 0) {
我对此方法有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字符串破解,但由于转义问题而失败。