批量复制文件工具[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下就更多了!不管了,写了就写了吧!记下来先!
浙公网安备 33010602011771号