#-*-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!")

使用python实现两个文件夹里文件的对比(包含内容的对比)的更多相关文章

  1. D盘Program Files 文件夹里文件不显示,没隐藏。怎么才能显示出来?

    D盘里有两个一模一样的Program Files 文件夹,文件夹里文件不显示,没隐藏.怎么才能显示出来?新买不久的电脑,win8.1系统 点击开始---运行---输入“cmd”(没有引号)---在弹出 ...

  2. VBA读取文件夹下所有文件夹及文件内容,并以树形结构展示

    Const TR_LEVEL_MARK = "+"Const TR_COL_INDEX = "A"Const TR_COL_LEVEL = "E&qu ...

  3. python 批量创建文件及文件夹(文件夹里再创文件)

    python 批量创建文件及文件夹(文件夹里再创文件)思路:文件建到哪>文件名字叫啥>创建文件夹>去新建的文件下>新建文件>给文件里边写东西>写个反馈给控制台> ...

  4. diff两个文件夹里的东西

    diff --help -x, --exclude=PAT               exclude files that match PAT 排除某个类型的文件 -u, -U NUM, --uni ...

  5. python 计算文件夹里所有内容的大小总和

    计算文件夹里所有内容的大小总和 递归方法 '''计算文件夹的大小''' import os def dir_file_size(path): if os.path.isdir(path): file_ ...

  6. Python 文件夹及文件操作

    import os import os.path from shutil import copy def copyfile(src, dst): count = 1 for filename in o ...

  7. Python学习(九)IO 编程 —— 文件夹及文件操作

    Python 文件夹及文件操作 我们经常会与文件和目录打交道,对于这些操作,python可以使用 os 及 shutill 模块,其中包含了很多操作文件和目录的函数. os 可以执行简单的文件夹及文件 ...

  8. OpenCV玩耍(一)批量resize一个文件夹里的所有图像

    鉴于用caffe做实验的时候,里面牵扯到一个问题是必须将训练集和测试集都转成256*256的图像,而官网给出的代码又不会用,所以我用opencv转了.其实opencv只转一幅图会很简单,关键在于“批量 ...

  9. (转)android res文件夹里面的drawable(ldpi、mdpi、hdpi、xhdpi、xxhdpi)

    android res文件夹里面的drawable(ldpi.mdpi.hdpi.xhdpi.xxhdpi) (1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),F ...

随机推荐

  1. 使用Axure生成网站结构图

    使用Axure设计的各网站(产品)页面,生成网站(产品)结构图.这个对于了解网站整体结构很有帮助. 需要把它生成对应结构的网站结构图. 第一步:在“主页”上面新建一个和“主页”平级的页面,命名为“网站 ...

  2. http,soap and rest

    http://www.cnblogs.com/hyhnet/archive/2016/06/28/5624422.html http://www.cnblogs.com/bellkosmos/p/52 ...

  3. 【Flask】sqlalchemy 排序

    ### 排序:1. order_by:可以指定根据这个表中的某个字段进行排序,如果在前面加了一个-,代表的是降序排序.2. 在模型定义的时候指定默认排序:有些时候,不想每次在查询的时候都指定排序的方式 ...

  4. 一个骑行者的独白,很不错,我就转载了。--原名是--<<关于认怂这件事>>

    一个骑行者的独白,很不错,我就转载了.--原名是--<<关于认怂这件事>>   PS:我不知道这些是对是错,但都不曾后悔,或许哪天我在生活面前也怂了,然后跑回大城市乖乖的当个小 ...

  5. FullPage.js全屏滚动插件

    一.介绍 fullPage.js是一个基于jQuery的插件,他能够很方便.很轻松的制作出全屏网站,主要功能有: 1.支持鼠标滚动 2.多个回调函数 3.支持手机.平板触摸事件 4.支持CSS3动画 ...

  6. iOS_XML与JSON解析

    XML与JSON简介 XML 可扩展标记语言 用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言 易读性高,编码手写难度小,数据量 ...

  7. Django 模板标签[转]

    Django 模板标签if/else 标签 基本语法格式如下: {% if condition %}     ... display{% endif %} 或者: {% if condition1 % ...

  8. Centos6.5安装Mysql5.6.10

    1. 先卸载掉老版本的mysql(linux严格区分大小写,查找的时候加上-i参数,和mysql相关的全部要卸) [root@liuchao ~]# rpm -qa | grep -i mysqlMy ...

  9. LCN协调者服务集群

    官方文档: https://github.com/codingapi/tx-lcn/wiki/TxManager%E9%9B%86%E7%BE%A4%E8%AF%B4%E6%98%8E 核心原理 通过 ...

  10. C# 处理base64 以及base64的原理分析

    base64的原理, http://www.cnblogs.com/diligenceday/p/6002382.html http://www.cnblogs.com/chengxiaohui/ar ...