ConfigObj将key = value更改为key = value,但我不想

时间:2019-06-17 08:58:17

标签: python configobj

我的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脚本,它以键作为命令。...

我希望可以避免这种情况,但是在文档中找不到这种东西。

1 个答案:

答案 0 :(得分:0)

似乎没有任何有意义的方法来控制ConfigObj的输出。不过,ConfigParser具有一个space_around_delimiters=False关键字参数,您可以传递该参数来编写。

config.conf:

[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的可怕之处在于,它确实需要节名称。有详细的解决方法,但是此代码可以帮助您入门。