python查找替换(三)
目的:
本脚本是对<python查找替换(二)>的改进,针地多项目多应用
进行配置文件更新替换.
目录:
E:\doc\doc\tomcat_aaa\webapp\111
E:\doc\doc\tomcat_aaa\webapp\222
E:\doc\doc\tomcat_aaa\webapp\333
E:\doc\doc\tomcat_bbb\webapp\444
E:\doc\doc\tomcat_bbb\webapp\555
E:\doc\doc\tomcat_bbb\webapp\666
E:\doc\doc\tomcat_ccc\webapp\777
E:\doc\doc\tomcat_ccc\webapp\888
E:\doc\doc\tomcat_ccc\webapp\999
文件数:各三个,分别是1.properties,2.properties,3.properties,
用于替换的值保存在mysql数据中:aaa_config bbb_config ccc_config
代码实现:
#encoding: UTF-8
import time,MySQLdb
import fnmatch
import re,os,sys
reload(sys)
sys.setdefaultencoding('utf-8')
#从数据库获得目标key/value
conn=MySQLdb.connect(host="192.168.1.23",user="myuser",passwd="123",db="manage",charset="utf8")
cursor = conn.cursor()
##切换到配置文件目录
curdir = r'E:\doc\doc\tomcat_'
proj = sys.argv[1]
sub_proj = sys.argv[2]
curdir=curdir + proj #对应项目的tomcat根目录
dirarray = [curdir,"webapp",sub_proj] #合并出子项目目录
source = '\\'.join(dirarray)
os.chdir(source) #切换子项目配置文件目录为当前目录
#根据项目选数据表配置文件表
if re.search("aaa", proj):
sql="select key123,qc from aaa_config"
cursor.execute(sql)
elif proj == "bbb" or sub_proj == "111":
sql="select key123,qc from bbb_config"
cursor.execute(sql)
else:
sql="select key123,qc from " + proj + "_config"
cursor.execute(sql)
#列出当目录下的所有配置文件
filelist = []
for file in os.listdir(source):
if fnmatch.fnmatch(file, '*.properties'):
filelist.append(file)
#逐个查找从当前目录下的各个配置文件key列表,并修改之
for thisfile in filelist:
fd=open(thisfile)
devconfigfile = fd.read()
print "First For,file is %s" %(thisfile)
p = re.compile("(.*)=") #实例化正则表达式
keylist = p.findall(devconfigfile) #获得原始key列表
fd.close
#从数据库中找到当前项目的所有key/value,并对当前配置文件进行value替换
for filekey in keylist:
filekey = filekey.replace(" ","") #去掉空格
print " Second For,filekey is %s" %(filekey)
cursor.execute(sql) #以重新执行sql代替恢复游标
for row in cursor.fetchall(): #从sql结果集中逐行取key/value对
dbkey=row[0]
dbvalue=row[1]
if filekey == dbkey:
s=[filekey,dbvalue] #合并出新key/value值
newvalue='='.join(s)
#print "---------------- %s file ------------------" %(thisfile)
print " Third For,filekey and dbkey is %s %s" %(filekey,dbkey)
print " newvalue is %s" %(newvalue)
#替换新值
devconfigfile, number = re.subn(filekey + ".*" + "=" + ".*",newvalue,devconfigfile)
fd=open(thisfile,'w')
fd.write(devconfigfile)
fd.close
fd = open(thisfile)
result = fd.read()
#print result
fd.close