python目錄遍歷文件名稱替換

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

    
相關文章
相關標籤/搜索