自动文件复制-python脚本

知识点:

(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/python
import 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);将字符串中的空格' '替换为'[ ]'。

(6) readlines

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

#
#   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, difflib

RE_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_path
        self.search_string = search_string
        self.replace_string = replace_string
        self.search_only = search_only
        self.file_filter = file_filter

        assert 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 "_" * 80

        time_begin = time.time()

        file_count = self.walk()

        print "_" * 80
        print "%s files searched in %0.2fsec." % (
            file_count, (time.time() - time_begin)
        )

    def walk(self):
        file_count = 0
        for 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 += 1
        return file_count

    def 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:
                return

            print filepath

    def 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_content
        else:
            new_content = old_content.replace(
                self.search_string, self.replace_string
            )

        print "Write new content into %s\n" % filepath,
        return new_content

if __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.path
def 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'
		    return
	    elif 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'
		    return
if __name__=='__main__':
	file_replace()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值