【发布时间】:2015-01-23 23:48:25
【问题描述】:
#!/usr/bin/python
import socket
import subprocess
ip=socket.gethostbyname(socket.gethostname())
reps= {'application.baseUrl': 'application.baseUrl="http://'+ip+':9000"',
'baseUrl': 'baseUrl="http://'+ip+':9000"'
}
f = open('/opt/presentation/conf/application.conf','r+')
lines = f.readlines()
f.seek(0)
f.truncate()
for line in lines:
for key in reps.keys():
if key in line:
line = line.replace(line, reps[key])
f.write(line+'\n')
f.close()
问题:它将 application.baseUrl 替换为 baseUrl="http://'+ip+':9000 而不是 application.baseUrl="http://'+ip+':9000,因为 baseUrl 在 application.baseUrl 中。
只有当它匹配整个字符串而不是字符串的一部分时,我如何替换一个键
文件名:abc.config
application.baseUrl="http://ip:9000"
baseUrl="http://ip:9000"
远程{
log-received-messages = on
netty.tcp {
hostname = "ip"
port = 9999
send-buffer-size = 512000b
receive-buffer-size = 512000b
maximum-frame-size = 512000b
server-socket-worker-pool {
pool-size-factor = 4.0
pool-size-max = 64
}
client-socket-worker-pool {
pool-size-factor = 4.0
pool-size-max = 64
}
}
}
【问题讨论】:
-
请注意,您根本不需要进行任何测试(即
'foo'.replace('Q','Z')只返回'foo',因此您不必在调用@ 之前确保密钥在行中987654327@),但是由于您的一个键是另一个键的子集,因此没有正则表达式就没有很好的方法。 -
application.conf看起来像什么?您能否提供一些预期的输入/输出? -
这里是配置文件格式:文件名:abc.config application.baseUrl="ip:9000" baseUrl="ip:9000" remote { log-received-messages = on netty.tcp { hostname =“ip”端口 = 9999 发送缓冲区大小 = 512000b 接收缓冲区大小 = 512000b 最大帧大小 = 512000b 服务器套接字工作池 { 池大小因子 = 4.0 池大小最大值 = 64 } client-socket-worker-pool { pool-size-factor = 4.0 pool-size-max = 64 } } }
标签: python regex python-2.7 python-3.x