在runtim重写配置文件

2024-06-16 13:52:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在通过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)

我对这种方法有两个顾虑:
-出现错误时可能会丢失配置
-每次删除文件中的注释

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


Tags: 文件方法confignewreadas配置文件with
2条回答

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文件。你知道吗

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

你知道吗配置.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()。 一定要找个更好的办法,这太脏了。你知道吗

编辑:我试着做一些简单的f字符串黑客,他们失败了,由于逃逸的问题。你知道吗

相关问题 更多 >