1
我試圖使用類似於sed -i
的就地值更改來更新配置文件的「值」部分。Python就地配置值更新
下面的代碼顯示瞭如何會做使用外殼上的更換sed
[[email protected] dir]# cat mystackconf.conf
>>first="one"
>>second="two"
>>third="four"
[[email protected] dir]# sed 's/\(^third=\).*/\1"three"/' mystackconf.conf
>>first="one"
>>second="two"
>>third="three"
我已經創建了一個很草率的Python代碼做的工作(使用的調用sed
命令subprocess
模塊)
STACK.PY
import subprocess
conf = '/var/tmp/dir/mystackconf.conf'
mydict = {"first": "one", "second": "two", "third": "three"}
for key, value in mydict.iteritems():
subprocess.Popen(
"/bin/sed -i 's/\(^%s=\).*/\\1\"%s\"/' %s" % (key, value, conf),
shell=True, stdout=subprocess.PIPE).stdout.read()
爲Th在python re
模塊或者用通配符替換字符串的時候可以使用更簡潔的方法嗎?我對正則表達式很陌生,所以我不知道如何進行嘗試。
[[email protected] dir]# cat mystackconf.conf
>>first="one"
>>second="two"
>>third="four"
[[email protected] dir]# python stack.py
[[email protected] dir]# cat mystackconf.conf
>>first="one"
>>second="two"
>>third="three"
下面是如何我想象它會做得非常非常差的嘗試:
STACK.PY
conf = '/var/tmp/dir/mystackconf.conf'
mydict = {"first": "one", "second": "two", "third": "three"}
with open(conf, 'a') as file:
for key, value in mydict.iteritems():
file.replace('[%s=].*' % key, '%s=%s' % (key, value))
是否要將字符串「four」的每個實例替換爲字符串「three」? – marcusshep
Nope - 只要key =「third」的值應該設置爲「three」 - 但是這會遍歷字典,因此對於字典中的每個鍵,如果在配置文件中有一個字符串以'%'開頭, s ='%key然後用字典中的值替換 –
AK47