#-*-coding:utf-8-*-    #===============================================================================
# 目录对比工具(包含子目录 ),并列出
# 1、A比B多了哪些文件
# 2、B比A多了哪些文件
# 3、二者相同的文件:文件大小相同 VS 文件大小不同  (Size相同文件不打印:与Size不同文件显示未排序)
#===============================================================================  import os, time,difflibAFILES = []  #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 sizedef 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中文件名的bpathbpathlen = len(bpath)bbfiles = []for f in bfiles:bbfiles.append(f[bpathlen:])afiles = aafilesbfiles = bbfilessetA = 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')breakelse: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 ^ setBaonlyFiles = []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!")

转载:https://www.cnblogs.com/luo-mao/p/5872532.html

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

  1. linux搜索指定文件夹里文件是否存在,Linux文件操作之文件查询与搜索命令详解...

    文件的查询和搜索也是最常用的操作,在嵌入式 Linux 开发中常常需要在 Linux 源码文件中查询某个文件是否存在,或者搜索哪些文件都调用了某个函数等等.本节我们就讲解两个最常用的文件查询和搜索命令 ...

  2. python 文件操作 os 如何检索文件夹内文件数量

    参考文章1:python os获取文件夹中文件夹内文件的数量,保存为CSV文件 参考文章2:用python计算大文件夹下小文件夹里文件的个数

  3. python目录下的文件夹_Python列出当前文件夹下文件的两种方法

    使用Python做一些自动化操作时,经常与文件夹和文件打交道,这就依赖于OS模块了. OS是Operate System的缩写,是Python标准库中一个用于访问操作系统功能的模块,OS模块中的接口可 ...

  4. python获取文件夹里有什么文件+查看特定格式的文件

    python获取文件夹里有什么文件+查看特定格式的文件 功能 程序 效果 后续 功能 获取文件夹的的文件+获取文件夹里的特定格式的文件,比如.png等 程序 import os folder = r& ...

  5. python读取多个文件夹里的图片并添加标签

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. **本文将为大家讲述如何读取多个文件夹下的图片并贴标签(一个文件夹一个标签) 图片存放方式: ...

  6. python文件数据总和计算_python 计算文件夹里所有内容的大小总和

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

  7. 使用python对文件夹里的所有表格合并且去重

    有的时候,我们需要将多张表格合并并去重 假如,我们需要将存放在E盘中table文件夹里的三张表格table01.xlsx,table02.xlsx,table03.xlsx合并并去重到文件merge_ ...

  8. < Android数据存储> 任务二 应用程序数据文件夹里的文件读写

    :zh]Android中提供了两个方法用来打开应用程序的数据文件夹IO流. 1.FileInputStream openFileInput(String name):参数name表示某个文件名,该方法 ...

  9. 5 Android数据存储 任务二 应用程序数据文件夹里的文件读写 ,

    Android中提供了两个方法用来打开应用程序的数据文件夹IO流. 1.FileInputStream openFileInput(String name):参数name表示某个文件名,该方法用于打开 ...

最新文章

  1. TEE_ObjectHandle在Crypto中的使用
  2. 用C#编写网页小应用程序(Applet)
  3. 剑指Offer - 面试题62. 圆圈中最后剩下的数字(约瑟夫环 递推公式)
  4. 报告客户端Web应用程序中的错误时的安全问题
  5. js系列教程6-BOM操作全解
  6. 【学习笔记】卡尔曼滤波中的协方差矩阵
  7. error: invalid argument ‘-std=gnu++98‘ not allowed with ‘C‘
  8. (9)Spring框架----AOP的HelloWorld
  9. C语言开发简单的学生成绩管理系统(附源码)
  10. 手机组态软件_安卓平板组态软件​_移动端组态软件介绍
  11. nutch2.3.1 mysql_nutch 安装部署 以nutch2.3.1 为例
  12. 2021年中国国家级高新区 (科技园)数量、产值及营业收入分析[图]
  13. 【数据库】用户sa登录失败,错误:18456
  14. 百度云开发clouda学习(一)
  15. 学会使用Composer
  16. android学习步骤
  17. xdoj 238 数组鞍点 二维数组 循环
  18. 按键精灵调用python插件_【Python 教程】使用 Python 和大漠插件进行文字识别
  19. 安信可EC系列模组接入OneNET物联网开放平台的多协议接入产品
  20. 成就亿万富翁的10条规则

热门文章

  1. 为什么要做语音聊天室
  2. 基于StyleGAN2的新版网红人脸生成器
  3. Pomelo 使用教程
  4. 计算机组成原理学习笔记:循环冗余校验码
  5. win11摄像头黑了用不了的七个解决办法
  6. Android入门第30天-Android里的Toast的使用
  7. 企业微信php 通讯录管理系统,php企业网站通讯录管理系统
  8. Android 文本,软键盘使用指南
  9. 论文精度笔记(五):《Micro-YOLO: Exploring Efficient Methods to Compress CNN based Object Detection Model》
  10. Oracle 运维DBA工作日常