fliecmp库:Python比较文件操作
目录
- 前言
- 生成示例文件
- 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比较文件操作相关推荐
- python的文件操作、模块操作、os模块、time、datatime模块以及模块的制作
Day12新手小白学python 第十二节 python的文件操作.模块操作.os模块.time.datatime模块以及模块的制作 目录 Day12新手小白学python 前言 一.文件打开关闭 二 ...
- Python之文件操作_读取_编码_os模块
目录 前言 一.文件基本操作 1.什么是文件 2.操作文件的步骤 3.文件的路径 4.open函数操作权限总结 5.文件读取 6.with-open-as 7.文件定位读取 8.文件编码 二.OS模块 ...
- python写文件追加 按行追加_你真的会用python进行文件操作吗
本篇文章主要比较系统的介绍了python中文件操作,以及在在使用中需要注意的问题. 什么是文件 文件是系统存储区域的一个命名位置,用来存储一些信息,便于后续访问.能够在非易失性存储器中实现持续性存储, ...
- Python基础-文件操作
Python基础-文件操作 1.文件的打开和关闭 # 1.打开文件 # 默认r模式 只读 文件不存在,报错 # f = open('a.txt')# w模式 写权限 # 如果文件不存在,就会创建文件 ...
- 15 python的文件操作
一.文件打开 文件(file) 通过Python程序来对计算机中的各种文件进行增删改查的操作,文件也叫I/O(Input/Output) 文件的操作步骤 打开文件 对文件进行各种操作(读.写)然后保存 ...
- python通过内置的什么函数打开一个文件_利用python进行文件操作
这篇文章主要介绍了如何利用python进行文件操作,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下 什么是文件 文件是系统存储区域的一个命名位置,用来存储一些信息,便于后续访问.能够在非 ...
- python对文件操作-python中文件操作的其他方法
Python中文件操作的一般方法,包括打开,写入,关闭.本文中介绍下python中关于文件操作的其他比较常用的一些方法. 首先创建一个文件poems: p=open("poems" ...
- python将字符串s和换行符写入文件fp_【python】文件操作
本文内容包括: 文件的读写操作 文件的各种系统操作 存储对象 遍历文件 上代码: import os import os.path rootdir = "d:/code/su/data&qu ...
- python - excel文件操作
下载相应的第三方库 进入下载的python文件夹下面,找到Scripts文件夹,在文件路径那里输入cmd 在命令提示符中输入:pip install xlwt 然后回车,等待下载状态为sucess就代 ...
最新文章
- java class对象创建时机_Java面向对象编程-类的声明周期
- mv 重命名或移动文件
- 2017-05-23 前端日报
- Electron中提示:Refused to execute inline event handler because it violates
- java在己有的类创子类怎么创_使用Java创建自己的异常子类
- 散谈游戏保护那点事~就从_TP开始入手吧
- FPGA RAM时分复用减少逻辑资源
- 打造网红内容和资本哪个更重要
- 基于Python操作Excel实战案例
- java+poi在Excel中生成二维码
- AUTOCAD——超级填充命令3
- 《路由器开发 - 路由器刷机指南》联想Newifi Y1刷机
- macbook pro 重置 NVRAM / PRAM
- 项目总结33:海关推送订单报【智能卡应用模块】卡片无效:错误码=51590
- 桌面计算机打开无响应,在win7系统中桌面无响应的几种解决方法
- 微信小程序项目转换成uniapp项目
- CVE-2020-1472: NetLogon特权提升漏洞通告
- Android APK加固(加壳)工具
- 华为无线设备配置WPA2-802.1X-AES安全策略
- Revit二次开发-根据名称获取标高