# -*- 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. 【C语言程序】让用户输入十个数,用冒泡排序法从小到大排序

    #include <stdio.h> #define N 10 void swap(int*a,int*b); int main(int argc, char *argv[]) {  in ...

  2. Alpha冲刺(4/10)——2019.4.27

    所属课程 软件工程1916|W(福州大学) 作业要求 Alpha冲刺(4/10)--2019.4.27 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪 ...

  3. Vue(九)小案例 - 百度搜索列表(跨域)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 11、python阶段测试

    1.执行Python脚本的两种方式 如果想要永久保存代码,就要用文件的方式 如果想要调试代码,就要用交互式的方式 2.Pyhton单行注释和多行注释分别用什么? 单行注释:# 多行注释: '' &qu ...

  5. dubbo+zipkin调用链监控(二)

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  6. 用原生javascript写出jquery中slideUp和slideDown效果

    设置块级元素的CSS属性overflow为hidden,然后动态改变height即可 var header=document.getElementsByTagName('header')[0]; he ...

  7. drawRect中抗锯齿

    在开始之前,我们需要创建一个DrawRectView 其初始代码为 // // DrawRectView.h // CGContextSetShouldAntialias // // Created ...

  8. Linux如何快速跳转到文档开头或者末尾

    输入 gg 命令,光标会移动到文档开头 : 输入 G 命令,光标会移动到文档末尾: 另外可以敲击 上下键.Page UP.Page Down 键快速查看文档:

  9. 05、transformation操作开发实战

    1.map:将集合中每个元素乘以2 2.filter:过滤出集合中的偶数 3.flatMap:将行拆分为单词 4.groupByKey:将每个班级的成绩进行分组 5.reduceByKey:统计每个班 ...

  10. C++异常处理解析: 异常的引发(throw), 捕获(try catch)、异常安全

    前言: C++的异常处理机制是用于将运行时错误检测和错误处理功能分离的一 种机制(符合高内聚低耦合的软件工程设计要求),  这里主要总结一下C++异常处理的基础知识, 包括基本的如何引发异常(使用th ...