目录

  • 前言
  • 生成示例文件
  • cmp()(比较文件)
  • cmpfiles()(比较一组文件)
  • dircmp()(比较目录)
    • left_list与right_list
    • 忽略部分文件进行对比
    • 其他属性

前言

对于文件的比较一般有几种,比如比较文件的内容,比较文件的大小,或者直接对比整个项目文件。特别是在项目的更新迭代中,可以通过该库来比较当前版本与之前版本有哪些文件不同。

所以,本篇将详细讲解Python的文件比较库:filecmp。

生成示例文件

在比较文件之前,我们首先需要有用于比较的文件。所以,为了后面的测试,我们先来创建一些文件。示例如下:

def mkfile(filename,content):with open(filename,'w') as f:f.write(content or filename)returnmkfile('filecmps/one.txt','1212121212')
mkfile('filecmps/two.txt','1212121212')
mkfile('filecmps/three.txt','333333333')

这里,我们先创建3个文件,其中2个文件的内容相等。

cmp()(比较文件)

fliecmp库提供了cmp()函数用于比较文件系统上的两个文件。示例如下:

import filecmpprint(filecmp.cmp('filecmps/one.txt', 'filecmps/two.txt', shallow=False))
print(filecmp.cmp('filecmps/one.txt', 'filecmps/three.txt', shallow=False))
print(filecmp.cmp('filecmps/one.txt', 'filecmps/two.txt'))
print(filecmp.cmp('filecmps/one.txt', 'filecmps/one.txt'))

运行之后,效果如下:

如果参数shallow为True,只判断os.stat()函数返回内容是否相同,如果相同就返回True,否则再比较文件内容是否相同,如果相同也返回True。使用shallow参数可以快速地比较文件是否有修改过。(shallow参数默认为True)

cmpfiles()(比较一组文件)

cmp()函数用于单个文件的比较,而要对比两个目录中的一组文件,我们需要使用cmpfiles()函数,示例如下:

import filecmpprint(filecmp.cmpfiles('filecmps', 'text', common=['13.png', '14.png', 'one.txt']))

运行之后,效果如下:

这里返回了3个列表,分别是相同列表,不同列表以及错误列表。相同列表放的是两个目录中相同的文件,不同列表是两个目录中不同的文件,但需要注意common指定了需要对比的文件,也就是说这3个列表的每个文件必须在common指定中才会用于对比,不指定不会对比也不会存在于列表中,哪怕文件夹下面有其他文件。错误列表指的是某个目录根本没有该文件。

dircmp()(比较目录)

前面2个函数都是针对文件进行的比较,但是项目文件的迭代对比往往直接对比的是整个目录结构,所以我们还需要掌握目录的比较。fliecmp库提供的目录比较函数为:dircmp()。示例如下:

import filecmpdc = filecmp.dircmp('filecmps', 'text')
dc.report()

运行之后,效果如下:

第1行为对比的两个文件夹,第2第3行为对比的两个目录中的所有文件。第4行是对比后的结果,这里只有3个文件完全相同。但是需要注意的是,report()函数只是用于比较当前目录下的文件,不包括里面文件夹以及文件夹下面的文件。如果需要递归比较所有目录文件,需要用到report_full_closure()。

示例如下:

import filecmpdc = filecmp.dircmp('filecmps', 'text')
dc.report_full_closure()

运行之后,效果如下:

left_list与right_list

在对比文件之前,我们可以列出所比较目录中的文件以及子目录。示例如下:

import filecmpdc = filecmp.dircmp('filecmps', 'text')
print(dc.left_list)
print(dc.right_list)

运行之后,效果如下:

left_list为第1个参数的目录,right_list为第2个参数的目录,把2个参数看成左右,自然很好区分。

忽略部分文件进行对比

在对比两个目录的所有文件之时,我们还可以手动的过滤掉不需要对比的文件及文件夹,比如我们不对比文件中的123文件夹中的所有文件,可以直接这样操作:

import filecmpdc = filecmp.dircmp('filecmps', 'text',ignore=['123'])
dc.report_full_closure()

运行之后,效果如下:

report_full_closure()函数本来需要一层一层目录去对比的。这里,博主过滤掉了其唯一的子目录123,所以只存在一层文件的对比。目录结构如下:

其他属性

除了这些方法与属性之外,还有其他的属性供开发者调用,比如只查找相同的文件,或者只判断某个目录的独有文件,可以这样操作:

import filecmpdc = filecmp.dircmp('filecmps', 'text')
print(dc.common)
print(dc.right_only)
print(dc.left_only)

运行之后,效果如下:

common:为2目录同时存在的文件名

right_only:为右目录独有的文件

left_only:为左目录独有的文件。

这里的common公共目录还可以进一步的操作,示例如下:

import filecmpdc = filecmp.dircmp('filecmps', 'text')
print(dc.common_dirs)
print(dc.common_files)
print(dc.common_funny)

运行之后,效果如下:

common_dirs:公共的文件夹

common_files:公共的文件

common_funny: 2个目录中类型不同的内容,或os.stat()指出的有错误的地方(可以简单的理解有一个文件夹是123,一个文件也是123,那么就会出现在common_files中)

以上是相同的划分,我们还有不同的划分,示例如下:

import filecmpdc = filecmp.dircmp('filecmps', 'text')
print(dc.same_files)
print(dc.diff_files)
print(dc.funny_files)

这里一一对应上面的公共,只是是不同的不是公共的。运行之后,效果如下:

最后还有一个属性:subdirs,用于将目录名映射到新的dircmp对象。示例如下:

import filecmpdc = filecmp.dircmp('filecmps', 'text')
print(dc.subdirs)

运行之后,效果如下:

fliecmp库:Python比较文件操作相关推荐

  1. python的文件操作、模块操作、os模块、time、datatime模块以及模块的制作

    Day12新手小白学python 第十二节 python的文件操作.模块操作.os模块.time.datatime模块以及模块的制作 目录 Day12新手小白学python 前言 一.文件打开关闭 二 ...

  2. Python之文件操作_读取_编码_os模块

    目录 前言 一.文件基本操作 1.什么是文件 2.操作文件的步骤 3.文件的路径 4.open函数操作权限总结 5.文件读取 6.with-open-as 7.文件定位读取 8.文件编码 二.OS模块 ...

  3. python写文件追加 按行追加_你真的会用python进行文件操作吗

    本篇文章主要比较系统的介绍了python中文件操作,以及在在使用中需要注意的问题. 什么是文件 文件是系统存储区域的一个命名位置,用来存储一些信息,便于后续访问.能够在非易失性存储器中实现持续性存储, ...

  4. Python基础-文件操作

    Python基础-文件操作 1.文件的打开和关闭 # 1.打开文件 # 默认r模式 只读 文件不存在,报错 # f = open('a.txt')# w模式 写权限 # 如果文件不存在,就会创建文件 ...

  5. 15 python的文件操作

    一.文件打开 文件(file) 通过Python程序来对计算机中的各种文件进行增删改查的操作,文件也叫I/O(Input/Output) 文件的操作步骤 打开文件 对文件进行各种操作(读.写)然后保存 ...

  6. python通过内置的什么函数打开一个文件_利用python进行文件操作

    这篇文章主要介绍了如何利用python进行文件操作,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下 什么是文件 文件是系统存储区域的一个命名位置,用来存储一些信息,便于后续访问.能够在非 ...

  7. python对文件操作-python中文件操作的其他方法

    Python中文件操作的一般方法,包括打开,写入,关闭.本文中介绍下python中关于文件操作的其他比较常用的一些方法. 首先创建一个文件poems: p=open("poems" ...

  8. python将字符串s和换行符写入文件fp_【python】文件操作

    本文内容包括: 文件的读写操作 文件的各种系统操作 存储对象 遍历文件 上代码: import os import os.path rootdir = "d:/code/su/data&qu ...

  9. python - excel文件操作

    下载相应的第三方库 进入下载的python文件夹下面,找到Scripts文件夹,在文件路径那里输入cmd 在命令提示符中输入:pip install xlwt 然后回车,等待下载状态为sucess就代 ...

最新文章

  1. java class对象创建时机_Java面向对象编程-类的声明周期
  2. mv 重命名或移动文件
  3. 2017-05-23 前端日报
  4. Electron中提示:Refused to execute inline event handler because it violates
  5. java在己有的类创子类怎么创_使用Java创建自己的异常子类
  6. 散谈游戏保护那点事~就从_TP开始入手吧
  7. FPGA RAM时分复用减少逻辑资源
  8. 打造网红内容和资本哪个更重要
  9. 基于Python操作Excel实战案例
  10. java+poi在Excel中生成二维码
  11. AUTOCAD——超级填充命令3
  12. 《路由器开发 - 路由器刷机指南》联想Newifi Y1刷机
  13. macbook pro 重置 NVRAM / PRAM
  14. 项目总结33:海关推送订单报【智能卡应用模块】卡片无效:错误码=51590
  15. 桌面计算机打开无响应,在win7系统中桌面无响应的几种解决方法
  16. 微信小程序项目转换成uniapp项目
  17. CVE-2020-1472: NetLogon特权提升漏洞通告
  18. Android APK加固(加壳)工具
  19. 华为无线设备配置WPA2-802.1X-AES安全策略
  20. Revit二次开发-根据名称获取标高

热门文章

  1. 通过rancher部署loki-distributed loki日志高可用集群 helm方式部署
  2. C语言数据结构+冒泡排序的实现
  3. 气动与PLC控制实验装置带机械手QY-QDSY01
  4. 提交一个骗子喵喵源码站
  5. Twisted模型简介
  6. 图像特征提取与匹配方法总结
  7. 重阳节[转自百度]---又到重阳节了
  8. 树莓派安装Python-OpenCV
  9. Ubuntu 安装和使用MySQL
  10. jQuery实现拍打灰太狼小游戏