python 替换查找工具,闲暇之余写的,不足之处,见凉。
1 #-*- coding: UTF-8 -*- 2 import sys 3 import string 4 import time 5 print sys.version 6 import re 7 import os,shutil,platform,datetime 8 9 starttime = datetime.datetime.now() 10 11 #dir = "E:\\Users\\wang\\Downloads\\templates\\2011" #Windows 12 dir = "/home/www/blog.26wz.com/templates/2012/abc" #查找所在目录路径 Linux 13 ext = "htm" #查找文件后缀 14 #多行 15 find_str = u"""abc""" #找查的字符串 16 replace_str = u"""中国人""" #替换的字符串口 17 18 #编码判断 19 try: 20 content.decode('utf-8') 21 except Exception, e: 22 #gbk 23 find_str = find_str.encode('gb2312') 24 replace_str = replace_str.encode('gb2312') 25 else: 26 #utf-8 27 find_str = find_str.encode('utf-8') 28 replace_str = replace_str.encode('utf-8') 29 30 i=0 31 for parent,dirnames, filenames in os.walk(dir): 32 for filename in filenames: 33 if ext == filename.rsplit('.',1)[1]: 34 filename_path = os.path.join(parent, filename) 35 content = file(filename_path,'r').read() 36 37 if content.find(find_str) > -1 : 38 i+=1 39 #复制文件备份 40 sysstr = platform.system() 41 if(sysstr == "Windows"): 42 src = os.getcwd() + filename_path.replace(dir.rsplit('\\',1)[0],'') 43 targetDir = src.rsplit('\\',1)[0] 44 elif(sysstr == "Linux"): 45 src = os.getcwd() + filename_path.replace(dir.rsplit('/',1)[0],'') 46 targetDir = src.rsplit('/',1)[0] 47 else: 48 exit() 49 50 if (os.path.exists(targetDir) == False): 51 os.makedirs(targetDir) 52 shutil.copy(filename_path, src) 53 54 content = content.replace(find_str,replace_str) 55 file_write = open(filename_path, 'w') 56 file_write.write(content) 57 file_write.close 58 59 print filename_path 60 61 62 63 print "file count:" + str(i) #打印出文件替换的个数 64 65 66 endtime = datetime.datetime.now() 67 print str((endtime - starttime).seconds) + ' sencond' #执行时间
说明:
一、支持Windows、Linux平台。
二、暂时不支持多行替换,还没有找到好的方法以,如果哪位网友想出,麻烦告知。
三、当模板文件众多,需要替换字符时,挺管用的,用过一些替换工具(如:TextCrawler、等),发现对gb2312 utf-8编码不是很友好。
四、QQ:271059875,技术码农,有时间可交流。