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,技术码农,有时间可交流。

 

 

 

posted on 2012-12-21 19:51  感動常在  阅读(1475)  评论(3编辑  收藏  举报