圆月山庄资源网 Design By www.vgjia.com
本文实例讲述了Python编程实现两个文件夹里文件的对比功能。分享给大家供大家参考,具体如下:
#-*-coding:utf-8-*- #=============================================================================== # 目录对比工具(包含子目录 ),并列出 # 1、A比B多了哪些文件 # 2、B比A多了哪些文件 # 3、二者相同的文件:文件大小相同 VS 文件大小不同 (Size相同文件不打印:与Size不同文件显示未排序) #=============================================================================== import os, time,difflib AFILES = [] #EE BFILES = [] #SVN COMMON = [] #EE & SVN def getPrettyTime(state): return time.strftime('%y-%m-%d %H:%M:%S', time.localtime(state.st_mtime)) # def getpathsize(dir): #获取文件大小的函数,未用上,仅供学习.故注释掉 # size=0 # for root, dirs, files in os.walk(dir): # #root:目录:str 如: C:\CopySVN\SystemObject\TopoProcedure\Built-in# #dirs:目录名称:列表: 如 ['Parsers'] # #files:名称:列表: 如 ['011D0961FB42416AA49D5E82945DE7E9.og',...] # #file:目录:str, 如 011D0961FB42416AA49D5E82945DE7E9.og # for file in files: # path = os.path.join(root,file) # size = os.path.getsize(path) # return size def dirCompare(apath,bpath): afiles = [] bfiles = [] for root, dirs , files in os.walk(apath): for f in files: afiles.append(root + "\\" + f) for root, dirs , files in os.walk(bpath): for f in files: bfiles.append(root + "\\" + f) #sizeB = os.path.getsize(root + "\\" + f) 此处定义的size无法在commonfiles进行比较. (A,B在各自的循环里面) # 去掉afiles中文件名的apath (拿A,B相同的路径\文件名,做成集合,去找交集) apathlen = len(apath) aafiles = [] for f in afiles: aafiles.append(f[apathlen:]) # 去掉bfiles中文件名的bpath bpathlen = len(bpath) bbfiles = [] for f in bfiles: bbfiles.append(f[bpathlen:]) afiles = aafiles bfiles = bbfiles setA = set(afiles) setB = set(bfiles) #print('%$%'+str(len(setA))) #print('%%'+str(len(setB))) commonfiles = setA & setB # 处理共有文件 #print ("===============File with different size in '", apath, "' and '", bpath, "'===============") #将结果输出到本地 #with open(os.getcwd()+'diff.txt','w') as di: #di.write("===============File with different size in '", apath, "' and '", bpath, "'===============") for f in sorted(commonfiles): sA=os.path.getsize(apath + "\\" + f) sB=os.path.getsize(bpath + "\\" + f) if sA==sB: #共有文件的大小比较 #pass #print (f + "\t\t" + getPrettyTime(os.stat(apath + "\\" + f)) + "\t\t" + getPrettyTime(os.stat(bpath + "\\" + f))) #以下代码是处理大小一致,但是内容可能不一致的情况 #print("in sa=sb") #print(os.getcwd()) saf=[] sbf=[] sAfile=open(apath + "\\" + f) iter_f=iter(sAfile) for line in iter_f: saf.append(line) sAfile.close() sBfile=open(bpath + "\\" + f) iter_fb=iter(sBfile) for line in iter_fb: sbf.append(line) sBfile.close() saf1=sorted(saf) sbf1=sorted(sbf) if(len(saf1)!=len(sbf1)): with open(os.getcwd()+'\\comment_diff.txt','a') as fp: print(os.getcwd()) fp.write(apath + "\\" + f+" lines size not equal "+bpath + "\\" + f+'\n') else: for i in range(len(saf1)): #print("into pre") if(saf1[i]!=sbf1[i]): print('into commont') with open(os.getcwd()+'\\comment_diff.txt','a') as fp1: fp1.write(apath + "\\" + f+" content not equal "+bpath + "\\" + f+'\n') break else: with open (os.getcwd()+'\\diff.txt','a') as di: di.write("File Name=%s EEresource file size:%d != SVN file size:%d" %(f,sA,sB)+'\n') #print ("File Name=%s EEresource file size:%d != SVN file size:%d" %(f,sA,sB)) # 处理仅出现在一个目录中的文件 onlyFiles = setA ^ setB aonlyFiles = [] bonlyFiles = [] for of in onlyFiles: if of in afiles: aonlyFiles.append(of) elif of in bfiles: bonlyFiles.append(of) #print ("###################### EE resource ONLY ###########################") #print ("#only files in ", apath) for of in sorted(aonlyFiles): with open (os.getcwd()+'\\EEonly.txt','a') as ee: ee.write(of+'\n') #print (of) #print ("*"*20+"SVN ONLY+"+"*"*20) #print ("#only files in ", bpath) for of in sorted(bonlyFiles): with open (os.getcwd()+'\\svnonly.txt','a') as svn: svn.write(of+'\n') #print (of) if __name__ == '__main__': FolderEE = 'D:\\search\\bb\\ObjectGroup - Copy\\ObjectGroup\\Built-in' FolderSVN = 'D:\\search\\bb\\ObjectGroup\\ObjectGroup\\Built-in' dirCompare(FolderEE, FolderSVN) print("done!")
PS:这里再为大家推荐一款功能相似的在线工具供大家参考使用:
在线文本比较工具:
http://tools.jb51.net/aideddesign/txt_diff
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python文件与目录操作技巧汇总》、《Python文本文件操作技巧汇总》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
标签:
Python,文件夹,文件,对比
圆月山庄资源网 Design By www.vgjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
圆月山庄资源网 Design By www.vgjia.com
暂无评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
2024年11月07日
2024年11月07日
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]