# -*- coding:utf-8 -*- import os import os.path import shutil import chardet import codecs mysql_file_dir = "E:/doc/项目文档/广东/MYSQL迁移/gd/aaa" db_mssql_dir="E:/doc/SVN文档/数据库/xxxx/98_特殊版本/xxs/用户管理_用户同步_改造后/02_proc" db_mysql_dir="E:/doc/SVN文档/数据库_MySql/掌上运维/98_特殊版本/ssss/用户管理_用户同步_改造后/02_proc" src_dir="E:/doc/项目文档/sssss/MYSQL迁移/2" flag_key="_改造后" #须要规范化的表名 mssql_mysql_map={ "sp_query_无优一本帐_网络规模验收到达数":"call proc_网络一本帐_无优_网络规模验收到达数", "sp_query_关键指标_智能网规模_钻取":"call proc_网络一本帐_规模_钻取_通用" } #根据 mssql_dir,mssql_file #从mysql_file_dir目录下复制文件到db_mysql_dir def copy_file(mssql_dir,mssql_file): mysql_dir=os.path.join(mssql_dir.replace(db_mssql_dir,db_mysql_dir),mssql_file) if not os.path.exists(mysql_dir): #print(mysql_dir) mysql_file_path=os.path.join(mysql_file_dir,mssql_file) #print(mysql_file_path) if os.path.exists(mysql_file_path): shutil.copyfile(mysql_file_path,mysql_dir) print("copy:"+mysql_file_path+" to:"+mysql_dir) #递归复制对应目录的文件 def list_file(dir): for fname in os.listdir(dir): dir_path=os.path.join(dir,fname) if os.path.isdir(dir_path): #print(dir_path) list_file(dir_path) else: #print(dir_path) copy_file(dir,fname) #递归判断文件是否存在 def is_exist_file(dir,file_name): for fname in os.listdir(dir): dir_path=os.path.join(dir,fname) if os.path.isdir(dir_path): #print(dir_path) if is_exist_file(dir_path,file_name)==True: return True else: if fname.lower()==file_name.lower(): #print("存在:"+fname) return True #显示mysql_file_dir这个目录下没有被复制到db_mysql_dir下目录的文件 def list_not_copy_file(mysql_file_dir,db_mysql_dir): for file in os.listdir(mysql_file_dir): if os.path.isfile(os.path.join(mysql_file_dir,file)): #print(file) #print(is_exist_file(db_mysql_dir,file)) if is_exist_file(db_mysql_dir,file)!=True: print(file) #不区分大小写替换 def ireplace(text,old, new): idx = 0 #print(text) while idx <len(text): index_l = text.lower().find(old.lower(), idx) if index_l == -1: return text text = text[:index_l] + new + text[index_l + len(old):] #print(text) idx = index_l + len(old) return text #打开文件,替换表名 def replace_standard_file_context(file_path,old_name,standard_name): try: #print(file_path) #若是是utf-8的 fr=open(file_path,'rb') cc=fr.read().decode('utf-8') #fr=open(file_path,'r') #char_coding=chardet.detect(fr.read()) #print(char_coding) #cc=fr.read() #cc=cc.encode('gbk') #cc=cc.decode("utf8","ignore") fr.close() #print(cc) finally: if fr: fr.close() #old_name=old_name #print(old_name) #cc=cc.lower() if(cc.lower().find(old_name.lower()+"]")>-1 or cc.lower().find(old_name.lower()+"\r\n")>-1 or cc.lower().find(old_name.lower()+" ")>-1 or cc.lower().find(old_name.lower()+"(")>-1 or cc.lower().find(old_name.lower()+")")>-1 or cc.lower().find(old_name.lower()+"`")>-1 or cc.lower().find(old_name.lower()+";")>-1 or cc.lower().find(old_name.lower()+"\"")>-1 or cc.lower().find(old_name.lower()+",")>-1 or cc.lower().find(old_name.lower()+"_")>-1 ): #print("判断替换") cc=ireplace(cc,old_name+"]",standard_name+"]") cc=ireplace(cc,old_name+"\r\n",standard_name+"\r\n") cc=ireplace(cc,old_name+" ",standard_name+" ") cc=ireplace(cc,old_name+"(",standard_name+"(") cc=ireplace(cc,old_name+")",standard_name+")") cc=ireplace(cc,old_name+"`",standard_name+"`") cc=ireplace(cc,old_name+";",standard_name+";") cc=ireplace(cc,old_name+"\"",standard_name+"\"") cc=ireplace(cc,old_name+",",standard_name+",") cc=ireplace(cc,old_name+"_",standard_name+"_") print("替换完") try: #cc=cc.encode('utf-8') #print(cc) fw=codecs.open(file_path,"w","utf-8") #,"utf-8" fw.write(cc) fw.close() print("文件内容替换:"+file_path," ",old_name,"==>",standard_name) finally: if fw: fw.close() #递归查找文件名和文件内容,替换规范后的值 def replace_standard_file_name(dir,old_name,standard_name): for fname in os.listdir(dir): dir_path=os.path.join(dir,fname) #if dir_path.find(flag_key)==-1 : # continue if os.path.isdir(dir_path): #print(dir_path) replace_standard_file_name(dir_path,old_name,standard_name) else: #print(dir_path) #copy_file(dir,fname) replace_standard_file_context(dir_path,old_name,standard_name) if((old_name+".sql")==fname): os.rename(os.path.join(dir,fname),os.path.join(dir,standard_name+".sql")) print("重命名:",fname,"==>",standard_name) #print(mysql_file_dir) print("从mysql目录复制脚本到mssql目录:") print("===============================") #list_file(db_mssql_dir) print("显示没有被复制过去的文件:") print("===============================") #not_copy_file(mysql_file_dir,db_mysql_dir) print("规范化表名:") print("===============================") for o in mssql_mysql_map.keys(): replace_standard_file_name(src_dir,o,mssql_mysql_map[o]) #print(o,"==>",mssql_mysql_map[o]) print("") #for parent_dir,parent_name,file_names in os.walk(mysql_file_dir): # print("parent_dir is:",parent_dir) # print("parent_name is:",parent_name) #for file_name in file_names: # print("file_name:",os.path.join(parent_dir,file_name))