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))
python目录遍历文件名称替换的更多相关文章
- MFC_选择目录对话框_选择文件对话框_指定目录遍历文件
选择目录对话框 void C资源共享吧视频广告清理工具Dlg::OnBnClickedCls() { // 清空编辑框内容 m_Edit.SetWindowTextW(L""); ...
- python遍历文件(替换)
#!/usr/local/bin/python # -*- coding: UTF-8 -*- #coding:gbk import re import os w_str="" x ...
- python目录和文件操作
一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法. 要操作目录,必须引入os模块 import os1.得到当前工作目录,即当前Python脚本工作的目录路径: os ...
- python目录和文件的列表清单
import os # 通过给定的文件夹,列举出这个文件夹当中,所有的文件,以及文件夹,子文件夹当中的所有文件def listFilesToTxt(dir,file): # 1.列举出,当前给定的文件 ...
- Python:目录和文件的操作模块os.path和OS常用方法
1.目录和文件的操作模块os.path,在使用之前要先导入:import os.path.它主要有以下几个重要的功能函数: #!/user/bin/python #coding= utf-8 impo ...
- Python目录和文件处理总结
1.判断目录是否存在.判断文件是否存在.创建目录.重命名目录或文件 import os #获取当前目录路径: E:\Work\Projects\python print(os.getcwd()) #判 ...
- [Python] 目录和文件操作
在Linux系统下用Python写脚本,肯定不能避免各种与目录和文件夹有关的操作.为了以后方便查阅,简单地针对Python中与目录和文件夹有关的操作进行汇总. 需要实现导入的模块为: import o ...
- python,遍历文件的方法
在做验证码识别时,识别时需要和库里的图片对比,找到最接近的那个图片,然后就行到了用与图片一致的字符命名,获取文件的名称,去将图片的名称读出来作为验证码.以下是我通过网上的资料总结的三种文件遍历的方式, ...
- python批量修改文件名称
参考文章:http://www.cnblogs.com/ma6174/archive/2012/05/04/2482378.html 最近遇到一个问题,在网上下载了一批视频课程,需要将每节课的名称标号 ...
随机推荐
- List集合的总结和应用场景的介绍
1.List的整体介绍 List 是一个接口,它继承于Collection的接口,它代表着有序的队列.list的实现类对象中每一个元素都有一个索引值,能够按照索引值进行元素查找. AbstractLi ...
- GItHub Git 基础教程 常用命令 命令
最近复习了一下Git的使用,简单总结了一些.以供以后查阅和大家参考. 一,安装 首先是Linux下: 打开shell ,输入 sudo apt-get install git-core 之后回车输入密 ...
- Linux软件开发常用的软件包(持续更新中)
下面是Linux开发常用的软件包: 软件包的名称 作用描述 安装方式 build-essential sudo apt-get install build-essential policycore ...
- 【jvm】windows下查看java进程下多线程的相关信息
微软工具:Process Explorer v15.3 下载地址:http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx 参考教程: ...
- Wordpress添加分类
网址一般不用中文,别名方便让网址更美观,如: xxx/category/new/
- nginx配置实例
user root root; worker_processes ; #error_log logs/error.log; #error_log logs/error.log notice; #err ...
- centos7防火墙iptables开放常用端口
清除所有规则: iptables -F 开放常用tcp端口: iptables -I INPUT -p tcp -m multiport --dports 20,21,22,3690,80,443,4 ...
- NLP第3章 中文分词技术
- Elasticsearch跨集群搜索(Cross Cluster Search)
1.简介 Elasticsearch在5.3版本中引入了Cross Cluster Search(CCS 跨集群搜索)功能,用来替换掉要被废弃的Tribe Node.类似Tribe Node,Cros ...
- js正则提取数字小数,提取中文,提取英文
var value="污染物:PM2.5"; //提取中文 console.log(value.replace(/[^\u4E00-\u9FA5]/g,'')); //提取英文 c ...