本文实例讲述了Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法。分享给大家供大家参考。具体如下:
这个东东本来是做来给公司数据同步用的:新服务器还没正式启用,旧的服务器还在使用,每天都有大量图片传到旧服务器上面,为了避免备份全部图片,所以写了这么个工具。
1. 运行效果如下图所示:
2. Python代码如下:
# coding=gbk ''' Created on 2011-1-7 @author: HH ''' import os,ConfigParser ''' 递归列出某目录下的文件,放入List中 ''' def listDir (fileList,path): files=os.listdir(path) for i in files: file_path=path+"\\"+i if os.path.isfile(file_path): fileList.append(file_path) for i in files: file_path=path+"\\"+i if os.path.isdir(file_path): #fileList.append(file_path) listDir(fileList,file_path) return fileList ''' 将List中内容写入文件 ''' def writeListToFile(list,path): strs="\n".join(list) f=open(path,'wb') f.write(strs) f.close() ''' 读入文件内容并放入List中 ''' def readFileToList(path): lists=[] f=open(path,'rb') lines=f.readlines() for line in lines: lists.append(line.strip()) f.close() return lists ''' 比较文件--以Set方式 ''' def compList(list1,list2): return list(set(list1)-set(list2)) ''' 复制List中文件到指定位置 ''' def copyFiles(fileList,targetDir): for file in fileList: targetPath=os.path.join(targetDir,os.path.dirname(file)) targetFile=os.path.join(targetDir,file) if not os.path.exists(targetPath): os.makedirs(targetPath) if not os.path.exists(targetFile) or (os.path.exists(targetFile) and os.path.getsize(targetFile)!=os.path.getsize(file)): print "正在复制文件:"+file open(targetFile,'wb').write(open(file,'rb').read()) else: print "文件已存在,不复制!" if __name__ == '__main__': path=".svn" #获取源目录 txtFile="1.txt" #目录结构输出的目的文件 tdir="cpfile" #复制到的目标目录 cfFile="config.ini"; #配置文件文件名 fileList=[] #读取配置文件 if(os.path.exists(cfFile)): cf=ConfigParser.ConfigParser() cf.read(cfFile) path=cf.get("main", "sourceDir") txtFile=cf.get("main","txtFile") tdir=cf.get("main","targetDir") else: print "配置文件不存在!" raw_input("\n按 回车键 退出\n") exit() if(os.path.exists(txtFile)): #如果导出的文件存在,就读取后比较 list1=readFileToList(txtFile) print "正在读取文件列表……" fileList=listDir (fileList,path) print "正在比较文件……" list_res=compList(fileList,list1) if len(list_res)>0: print "以下是原目录中不存在的文件:\n" print "\n".join(list_res) print "\n共计文件数:"+str(len(list_res))+"\n" if raw_input("\n是否复制文件?(y/n)")!='n': copyFiles(list_res,tdir) else: print "没有不相同的文件!" else: #如果导出的文件不存在,则导出文件 print "正在读取文件列表……" fileList=listDir (fileList,path) writeListToFile(fileList,txtFile) print "已保存到文件:"+txtFile raw_input("\n按 回车键 退出\n")
#配置文件名:config.ini [main] sourceDir=wwwroot txtFile=1.txt targetDir=cp
希望本文所述对大家的Python程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#cainiaojc.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。