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

python目录遍历文件名称替换的更多相关文章

  1. MFC_选择目录对话框_选择文件对话框_指定目录遍历文件

    选择目录对话框 void C资源共享吧视频广告清理工具Dlg::OnBnClickedCls() { // 清空编辑框内容 m_Edit.SetWindowTextW(L""); ...

  2. python遍历文件(替换)

    #!/usr/local/bin/python # -*- coding: UTF-8 -*- #coding:gbk import re import os w_str="" x ...

  3. python目录和文件操作

    一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法. 要操作目录,必须引入os模块 import os1.得到当前工作目录,即当前Python脚本工作的目录路径: os ...

  4. python目录和文件的列表清单

    import os # 通过给定的文件夹,列举出这个文件夹当中,所有的文件,以及文件夹,子文件夹当中的所有文件def listFilesToTxt(dir,file): # 1.列举出,当前给定的文件 ...

  5. Python:目录和文件的操作模块os.path和OS常用方法

    1.目录和文件的操作模块os.path,在使用之前要先导入:import os.path.它主要有以下几个重要的功能函数: #!/user/bin/python #coding= utf-8 impo ...

  6. Python目录和文件处理总结

    1.判断目录是否存在.判断文件是否存在.创建目录.重命名目录或文件 import os #获取当前目录路径: E:\Work\Projects\python print(os.getcwd()) #判 ...

  7. [Python] 目录和文件操作

    在Linux系统下用Python写脚本,肯定不能避免各种与目录和文件夹有关的操作.为了以后方便查阅,简单地针对Python中与目录和文件夹有关的操作进行汇总. 需要实现导入的模块为: import o ...

  8. python,遍历文件的方法

    在做验证码识别时,识别时需要和库里的图片对比,找到最接近的那个图片,然后就行到了用与图片一致的字符命名,获取文件的名称,去将图片的名称读出来作为验证码.以下是我通过网上的资料总结的三种文件遍历的方式, ...

  9. python批量修改文件名称

    参考文章:http://www.cnblogs.com/ma6174/archive/2012/05/04/2482378.html 最近遇到一个问题,在网上下载了一批视频课程,需要将每节课的名称标号 ...

随机推荐

  1. js float运算精度问题

    先放个前辈的文章:JavaScript数字精度丢失问题总结 今天遇到了19.99*100的问题,答案不等于1999,因为在javascript中浮点数的计算是以2进制计算的.自己写了一波解决方法(不能 ...

  2. Mac/Ubuntu下的数据建模工具PDMan,替代PowerDesigner

    PowerDesigner我使用过用Wine在Linux和Mac下用,但总有些缺陷,用Navicat却发觉没有Linux版本的: 一般关心的问题主要有如下: 1.数据库的关系设计图. 2.导出数据库脚 ...

  3. pygame-KidsCanCode系列jumpy-part16-enemy敌人

    接上回继续,这次我们要给游戏加点难度,增加几个随机出现的敌人,玩家碰到敌人后Game Over. 最终效果如下,头上顶个"电风扇"的家伙,就是敌人. 一.先定义敌人类 # 敌人类 ...

  4. JavaScript数组(三)数组对象使用整理

    一.数组声明方法1. var  a=new Array();2. var a=new Array([size]);3.var a=new Array(['a'],[1],['b'],[123]);4. ...

  5. Spring Boot 之httpClient使用

    版权声明:本文为博主原创文章,转载时请在文章最前方附上本文地址. https://blog.csdn.net/qq_35033270/article/details/80112085 超文本传输协议( ...

  6. SPI协议详解

    原帖地址:https://blog.csdn.net/weiqifa0/article/details/82765892

  7. 这13个开源GIS软件,你了解几个?【转】

    泰伯网有看点的空间地理信息资讯都在这,你还在等什么? 这些开源GIS软件,你了解几个?本文内容部分来源于一份罗列了关于GIS软件应用的文章,笔者将其编译整合. 地理信息系统(Geographic In ...

  8. SSE图像算法优化系列十九:一种局部Gamma校正对比度增强算法及其SSE优化。

    这是一篇2010年比较古老的文章了,是在QQ群里一位群友提到的,无聊下载看了下,其实也没有啥高深的理论,抽空实现了下,虽然不高大上,还是花了点时间和心思优化了代码,既然这样,就顺便分享下优化的思路和经 ...

  9. 游戏开发中IIS常见支持MIME类型文件解析

    游戏开发中IIS常见支持MIME类型文件解析 .apkapplication/vnd.android .ipaapplication/vnd.iphone .csbapplication/octet- ...

  10. Vue Resource root options not used?

    I specify a root options in my Vue-Resource in my main.js file, but when I do the request, it does n ...