如果值不存在,则从python中为key = value添加值

时间:2014-04-29 20:12:51

标签: python linux sed

我正在尝试从python脚本编辑配置文件。默认情况下,配置文件在一行上包含key=,没有值。但是用户可能已经编辑了conf文件,因此它显示为key=value1。如果是这种情况,我不想编辑值,但不要管它。我对sed的调用如下:

from subprocess import call

call(["/bin/sed", "-i", "s/key=\\n/key=val/", confPath])

但这无法匹配。我用\n而不是\\n尝试了它,并且由于'未终止的s命令'而导致崩溃。我已经尝试使用\\r,但这也不匹配。

请注意,我无法致电s/key=/key=val/,因为如果文件已包含key=valval1,我最终可能会在conf文件中找到key=val1

2 个答案:

答案 0 :(得分:2)

尝试使用Python的真正力量,这次它有昵称ConfigParser模块,它为您提供了这种工作的完全舒适

https://docs.python.org/2/library/configparser.html

有cfg.ini:

[Main]
name=Jan
surname=Vlcinsky

你可以玩它:

>>> import ConfigParser
>>> fname = "cfg.ini"
>>> config = ConfigParser.RawConfigParser({"age": 100})
>>> config.get("Main", "name")
"Jan"
>>> config.get("Main", "age")
100

密钥"年龄"的默认值在ConfigParser.RawConfigParser时刻给出。其他ConfigParser解析器也支持它。

这是阅读,写作也是可能的。

答案 1 :(得分:2)

我赞成@ Jan的使用python ConfigParser的解决方案,但是如果你真的喜欢使用正则表达式,你可以使用$行结束指示符而不是'明确地说:

call(["/bin/sed", "-i", "s/key=$/&val/", confPath])

key=$表示“匹配字符串'key =',在该行后面没有其他内容。”

&表示“在此处包含您设置的所有内容”,在您的情况下为“{KEY} =”