批量复制文件工具[Python]
刚下了一本书的实例代码,我想把它们拷贝到Eclipse下的指定包里面去,但是发现每个.java文件都放在一个小文件夹里面的。本来是在是用Dos命令cp *.java 复制过去。但是不知道为什么我这的DOS命令总是出错。我怀疑是安装了Cygwin,并把、Cygwin当道path里面排到DOS命令前面了,所以就按照Cygwin运行了,而我按照Dos中cp命令的格式在Cygwin可能是不对的!
所以弄了几下老出问题就火了,还不如自己弄一个!反正python写起来也快!
所以就有了下面这个东西!
还很粗糙,不过最起码能满足我的要求!
#-*- coding:utf8 -*- ''' Created on 2011-11-23 @author: heshizhu ''' import os import sys import re
def Move_Files(srcDir,pattern,desDir,rmode=False): """ 移动指定源目录下的文件到目标目录下,移动的文件名满足pattern给定的模式 rmode表示是否需要迭代寻找该目录下的所有子目录,rmode=True表示寻找子目录,rmode=False表示不寻找子目录 如: srcDir:C:\\temp\\code\\ pattern:java desDir:C:\\java\\ """ fileList=Load_Files(srcDir,rmode) filteredFileList=Filter_File(fileList,pattern) Store_To_File(filteredFileList,desDir) def Store_To_File(fileList,desDir): for file in fileList: fr=open(file,'r') fw=open(os.path.join(desDir,os.path.basename(file)),'w') fw.writelines(fr.readlines()) fw.close() fr.close() def Filter_File(fileList,pattern): list=[] for file in fileList: filename=os.path.basename(file) if filename.find(pattern)!=-1:#这里我没有使用正则,直接使用字符串匹配 list.append(file) return list def Load_Files(srcDir,rmode): list=Load_File_Full(srcDir) if rmode else Load_File_Partly(srcDir) return list def Load_File_Partly(path): return os.listdir(path) def Load_File_Full(path): list=[] for root,dirs,files in os.walk(path): for filespath in files: list.append(os.path.join(root,filespath)) return list src=sys.argv[1] pattern=sys.argv[2] des=sys.argv[3] Move_Files(src,pattern,des,True) if __name__=="__main__": src="D:\\tmp\\java-puzzlers\\puzzlers-with-character\\" pattern="java" des="D:\\tmp\\java-puzzlers\\puzzlers-with-character\\" Move_Files(src,pattern,des,True) pass
后记:其实我知道啦!实现这样的功能有很多现成的东西可以!就是Windows下也还有一个powershell,linux/unix下就更多了!不管了,写了就写了吧!记下来先!