小桥流水的专栏

知识点:

(1)isinstance:

isinstance(object, classinfo) 04.判断实例是否是这个类或者object是变量 05. 06.classinfo 是类型(tuple,dict,int,float) 07.判断变量是否是这个类型 08. 09.class objA: 10.pass 11. 12.A = objA() 13.B = 'a','v' 14.C = 'a string' 15. 16.print isinstance(A, objA) 17.print isinstance(B, tuple) 18.print isinstance(C, basestring) 19.输出结果: 20.True 21.True 22.True (2)difflib:字符串的比较模块

(3)fnmatch:匹配文件名或字符串

(4)python walk:os.walk(’path’),该函数返回一个列表,列表的每个元素是一个三元组,三元组里第一个元素是path下的目录(包括path),第二个元素为该目录下的所有目录名列表,第三个元素为该目录下所有文件名的列表。看到网上有删除.cvs目录的代码,自己也写了一个删除.svn的脚本:

#!/usr/bin/pythonimport os, sys, shutil; def remove_svn(path):for root,dirs,files in os.walk(path):for dir in dirs:if dir == ".svn":shutil.rmtree(os.path.join(root,dir)) if len(sys.argv) <= 1:print "usage: ./remove_svn path"else:remove_svn(sys.argv[1])

以上功能中值得说明的其他几个函数:1. shutil.rmtree(path)这个函数删除非空目录,它和os.rmdir(path)的区别在于os.rmdir只能删除空目录2. os.path.join(path1, path2),,该函数将两个路径合成一个路径,第一个路径path1是第二个路径path2的父目录3. sys.argv是命令行参数列表,第一个参数默认为程序名,第二个开始才是真正的参数

(5)

re.sub用于替换字符串中的匹配项。下面一个例子将字符串中的空格 ‘ ‘ 替换成 ‘-‘ :

import re text = "JGood is a handsome boy, he is cool, clever, and so on…" print re.sub(r'\s+', '-', text)

re.sub的函数原型为:re.sub(pattern, repl, string, count)

其中第二个函数是替换后的字符串;本例中为’-‘

第四个参数指替换个数。默认为0,表示每个匹配项都替换。

re.sub还允许使用函数对匹配项的替换进行复杂的处理。如:re.sub(r’\s’, lambda m: ‘[‘ + m.group(0) + ‘]’, text, 0);将字符串中的空格’ ‘替换为'[ ]’。

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

## This library is created to search and replace related datas# Author:xuan_qi@trendmicro.com.cn# Created Date: 2015/02/13#import os, re, time, fnmatch, difflibRE_TYPE = type(re.compile(""))class SearchAndReplace(object):def __init__(self, search_path, search_string, replace_string,search_only=True, file_filter=("*.*",)):self.search_path = search_pathself.search_string = search_stringself.replace_string = replace_stringself.search_only = search_onlyself.file_filter = file_filterassert isinstance(self.file_filter, (list, tuple))self.is_re = isinstance(self.search_string, RE_TYPE)print "Search '%s' in [%s]…" % (self.search_string, self.search_path)print "_" * 80time_begin = time.time()file_count = self.walk()print "_" * 80print "%s files searched in %0.2fsec." % (file_count, (time.time() – time_begin))def walk(self):file_count = 0for root, dirlist, filelist in os.walk(self.search_path):for filename in filelist:for file_filter in self.file_filter:if fnmatch.fnmatch(filename, file_filter):self.search_file(os.path.join(root, filename))file_count += 1return file_countdef search_file(self, filepath):f = file(filepath, "r")old_content = f.read()f.close()if self.is_re or self.search_string in old_content:new_content = self.replace_content(old_content, filepath)if self.is_re and new_content == old_content:returnprint filepathdef replace_content(self, old_content, filepath):if self.is_re:new_content = self.search_string.sub(self.replace_string, old_content)if new_content == old_content:return old_contentelse:new_content = old_content.replace(self.search_string, self.replace_string)print "Write new content into %s\n" % filepath,return new_contentif __name__ == "__main__":SearchAndReplace(search_path="C:\\Users\\xuan_qi\\Desktop\\12",# e.g.: simple string replace:search_string='the old string',replace_string='the new string',# e.g.: Regular expression replacing (used re.sub)#search_string = re.compile('{% url (.*?) %}'),#replace_string = "{% url '\g<1>' %}",search_only=True,file_filter=("*.py",), # fnmatch-Filter)

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

import sys,os,os.pathdef file_replace():path = "C:\\Users\\xuan_qi\\Desktop\\12\\new 2.txt"old_data = "new"for i in [1,2,3,4]:new_data = "new"+str(i)if not os.path.exists(path):print 'file of dir does not exists!\n'returnelif os.path.isdir(path):for root,dirs,files in os.walk(path):for fn in files:filepath = os.path.join(root,fn)f = open(filepath,'r+')line = f.readlines()#f.seek(0)for s in line:f.write(s.replace(old_data,new_data))f.close()elif os.path.isfile(path):f = open(path,'r+')line = f.readlines()#f.seek(0)for s in line:f.write(s.replace(old_data,new_data))f.close()else:print 'illegal,not a file or dir\n'returnif __name__=='__main__':file_replace()

只有不快的斧,没有劈不开的柴。

小桥流水的专栏

相关文章:

你感兴趣的文章:

标签云: