# -*- 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))