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" #Windows12 dir = "/home/www/blog.26wz.com/templates/2012/abc" #尋找所在目錄路徑 Linux13 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 #gbk23 find_str = find_str.encode('gb2312')24 replace_str = replace_str.encode('gb2312')25 else:26 #utf-827 find_str = find_str.encode('utf-8')28 replace_str = replace_str.encode('utf-8') 29 30 i=031 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+=139 #複製檔案備份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.close58 59 print filename_path60 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,技術碼農,有時間可交流。