首页 > 解决方案 > ConfigObj 将 key=value 更改为我不想的 key = value

问题描述

我有内容的conf文件:

key1=value1
key2=value2
font="\"Font\""

它就像 bash 脚本中的值一样使用。

当我使用 cgi+python3 和 ConfigObj 4.7.0 更改某些值时:

def set_conf_values(filename, param, value):
    config = ConfigObj(filename)
    config['%s' % param] = value
    config.write()

conf文件被重写并且格式是新的:

key1 = value1
key2 = value2
font = `\"Font\"`

未触及值的事件。这打破了我的 Bash 脚本,它将键作为命令......

我希望有避免这种情况的选项,但在文档中找不到这样的东西。

标签: pythonconfigobj

解决方案


似乎没有任何有意义的方式来控制 ConfigObj 的输出。但是,ConfigParser 有一个space_around_delimiters=False关键字参数,您可以将其传递给 write。

配置文件:

[section1]
key1=value1
key2=value2
font="\"Font\""

代码:

import configparser
from validate import Validator


def set_conf_values(filename, section, param, value):
    config = configparser.ConfigParser()
    config.read(filename)

    print({section: dict(config[section]) for section in config.sections()})
    config[section]['%s' % param] = value
    with open('config2.conf', 'w') as fid:
        config.write(fid, space_around_delimiters=False)

filename = 'config.conf'
set_conf_values(filename, 'section1', 'key2','value2_modified') 

config2.conf(输出):

[section1]
key1=value1
key2=value2_modified
font="\"Font\""

ConfigParser 的可怕之处在于它真的需要节名。对此有详细的解决方法,但此代码将帮助您入门。


推荐阅读