# -*- 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. Mac下hadoop运行word count的坑

    Mac下hadoop运行word count的坑 Word count体现了Map Reduce的经典思想,是分布式计算中中的hello world.然而博主很幸运地遇到了Mac下特有的问题Mkdir ...

  2. 深入理解JVM(3)——垃圾收集策略详解

    Java虚拟机的内存模型分为五部分:程序计数器.Java虚拟机栈.本地方法栈.堆.方法区. 程序计数器.Java虚拟机栈.本地方法栈都是线程私有的,也就是每个线程都拥有这三个区域,而且这三个区域会随着 ...

  3. Java基础知识--内存管理

    Java语言中 的垃圾收集器相对于以前的其他语言优势是什么? 过去的语言需要程序员显示的进行分配内存.释放内存.这种做法可能会引起“内存泄漏”,即由于某种原因是分配给程序的内存无法释放,如果该任务不断 ...

  4. Some interesting facts about static member functions in C++

    Ref http://www.geeksforgeeks.org/some-interesting-facts-about-static-member-functions-in-c/ 1) stati ...

  5. Tips_方格拼图效果

    用原生的javascript实现方格拼图效果 1.新建文件夹 代码如下: 01.html <!DOCTYPE html> <html lang="en"> ...

  6. Listener(1)—基础知识

    一.监听器 1.概念: 专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监听的对象状态发生情况时,立即采取相应的 行动.Servlet规范为每种事件监听器都定义了相应的接口,w ...

  7. C#实战技能之WebApi+Task+WebSocket

    一.背景介绍 环境的局限性: 用户在使用XX客户端的时候,必须每台电脑都安装打印组件,同时由于XX客户端使用的是 websocket进行通讯,这就必须限制用户的电脑浏览器必须是IE10.0+以上版本, ...

  8. [Asp.net core]使用ssh命令发布asp.net core项目

    命令 # 移除之前发布的包 rm -rf ./.Publish rm -rf ./Wolfy.Blog.tar.gz # 编译并发布 将发布包打包在.Publish目录下 -o "../.P ...

  9. (2):Mysql 查看、创建、更改 数据库和表

    一.一探究竟 我想看看有多少个数据库,有多少个表,以及表里有啥东西.那么你可以这样: 图形界面: 命令: 查看多少个数据库:注意 后面带s #查看 SHOW DATABASES; #查看表 USE b ...

  10. 使用h5py操作hdf5文件

    HDF(Hierarchical Data Format)指一种为存储和处理大容量科学数据设计的文件格式及相应库文件.HDF 最早由美国国家超级计算应用中心 NCSA 开发,目前在非盈利组织 HDF ...