python - 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 脚本,它将键作为命令......
我希望有避免这种情况的选项,但在文档中找不到这样的东西。
解决方案
似乎没有任何有意义的方式来控制 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 的可怕之处在于它真的需要节名。对此有详细的解决方法,但此代码将帮助您入门。
推荐阅读
- python - 在不影响播放速度的情况下更改音频采样率
- html - 尽管遵循在线示例,但 Div 并未并排出现
- python - Django to_representation 和 filter_fields 错误:TypeError: 'Meta.fields'
- node.js - 用打字稿反应应用程序我想在我的应用程序中集成 SSR 但出现错误
- asterisk - Asterisk 电话会议适用于 Polycom 电话,但如何使其适用于 microsip 软电话
- google-kubernetes-engine - Apache Beam 管道在 GKE 上失败
- php - 升级 Laravel 5.8 后 ValidationException 错误消息不起作用
- r - R如何总结其他列的列细分百分比
- sql - 如何查找两个数组是否包含sql中的任何常见项目
- angular - 为什么 apollo client:codegen 不生成类型?