# -*- 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. 使用PrerenderSpaPlugin预渲染插件没有成功渲染

    问题 在已有vue项目里使用prerender-spa-plugin插件时,遇到了build出来的页面是白屏或者出现{"statusCode":404,"error&qu ...

  2. flask内容之数据库的管理

    #! /usr/bin/env python # *-* coding: utf-8 *-* from flask import Flask, flash, redirect from flask i ...

  3. 转 ef中使用mysql步骤--Entity Framework 6 with MySql

    原文:http://lvasquez.github.io/2014/11/18/EntityFramework-MySql/ For the Entity Framework 6 support we ...

  4. 搭建memcached使用:/usr/bin/phpize 安装memcached扩展的时候报错

    Can't find PHP headers in /usr/include/phpThe php-devel package is required for use of this command ...

  5. linux下gflags的安装

    gflags是google开发的一套命令行参数解析工具,被很多软件系统所依赖,应该算是一个基础的库,安装其实很简单,但是如果在网上找的一些教程大部分都是安装后不能被其他软件调用的,因为默认使用cmak ...

  6. bootstrap3-iframe-modal子页面在父页面显示模态框

    本文灵感来自:http://www.cnblogs.com/chengxuyuanzhilu/p/5132328.html 子页面内容 //打开模态框 function openMySelectMod ...

  7. mysql YEARWEEK(date[,mode]) 函数 查询上周数据 以及本周数据

    通常使用下边sql即可(如果数据库设置了周一为一周起始的话):  查询上周数据(addtime为datetime格式)  SELECT id,addtime FROM mall_order WHERE ...

  8. MATLAB 画柱状图(/直方图)修改横坐标名称并使其横着显示

    使用MATLAB 画柱状图 ,即bar (x,y),其横坐标是默认 1.2.3.4.……的 % --v1 y1=[asum1,asum2,asum3,asum4,asum5,asum6,asum7,a ...

  9. Redis 学习之路 (011) - redis 多数据库

    一台服务器上都快开启200个redis实例了,看着就崩溃了.这么做无非就是想让不同类型的数据属于不同的应用程序而彼此分开. 那么,redis有没有什么方法使不同的应用程序数据彼此分开同时又存储在相同的 ...

  10. linux内存管理之malloc、vmalloc、kmalloc的区别

    kmalloc kzalloc vmalloc malloc 和get_free_page()的区别 一.简述 1. kmalloc申请的是较小的连续的物理内存,虚拟地址上也是连续的.kmalloc和 ...