全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】

本文实例讲述了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./aideddesign/txt_diff

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python文件与目录操作技巧汇总》、《Python文本文件操作技巧汇总》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。


# Python  # 文件夹  # 文件  # 对比  # Python 标准库zipfile将文件夹加入压缩包的操作方法  # 浅谈Python中文件夹和python package包的区别  # python 通过文件夹导入包的操作  # python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法  # Python打包文件夹的方法小结(zip  # tar  # tar.gz等)  # python包和文件夹有的区别点总结  # 操作技巧  # 进阶  # 相关内容  # 出现在  # 仅供  # 感兴趣  # 数据结构  # 去找  # 给大家  # 更多关于  # 所述  # 程序设计  # 使用技巧  # 文本文件  # 再为  # 文件夹里  # 讲述了  # 目录中  # Parsers  # Built 


相关文章: 如何彻底删除建站之星生成的Banner?  ,南京靠谱的征婚网站?  C#如何在一个XML文件中查找并替换文本内容  临沂网站制作公司有哪些,临沂第四中学官网?  如何高效利用亚马逊云主机搭建企业网站?  开封网站制作公司,网络用语开封是什么意思?  北京网站制作公司哪家好一点,北京租房网站有哪些?  建站168自助建站系统:快速模板定制与SEO优化指南  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  高防服务器租用如何选择配置与防御等级?  定制建站价位费用解析与套餐推荐全攻略  大学网站设计制作软件有哪些,如何将网站制作成自己app?  宁波免费建站如何选择可靠模板与平台?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  深圳网站制作平台,深圳市做网站好的公司有哪些?  建站org新手必看:2024最新搭建流程与模板选择技巧  建站之星收费标准详解:套餐费用及年费价格表一览  建站主机服务器选型指南与性能优化方案解析  C++如何编写函数模板?(泛型编程入门)  北京网站制作的公司有哪些,北京白云观官方网站?  如何通过商城自助建站源码实现零基础高效建站?  建站之星如何保障用户数据免受黑客入侵?  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  Swift中swift中的switch 语句  ,网站推广常用方法?  建站之星官网登录失败?如何快速解决?  青岛网站建设如何选择本地服务器?  C++如何使用std::optional?(处理可选值)  建站主机系统SEO优化与智能配置核心关键词操作指南  ,柠檬视频怎样兑换vip?  如何设置并定期更换建站之星安全管理员密码?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  如何通过宝塔面板实现本地网站访问?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  建站VPS选购需注意哪些关键参数?  如何通过智能用户系统一键生成高效建站方案?  建站主机如何安装配置?新手必看操作指南  建站之星如何快速解决建站难题?  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  网站企业制作流程,用什么语言做企业网站比较好?  高端建站三要素:定制模板、企业官网与响应式设计优化  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  如何在景安云服务器上绑定域名并配置虚拟主机?  如何快速搭建安全的FTP站点?  如何快速辨别茅台真假?关键步骤解析  广平建站公司哪家专业可靠?如何选择?  子杰智能建站系统|零代码开发与AI生成SEO优化指南 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。