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

    
相关文章
相关标签/搜索