Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >fliecmp:Python比较文件操作

fliecmp:Python比较文件操作

作者头像
luckpunk
发布于 2023-09-14 00:18:47
发布于 2023-09-14 00:18:47
33300
代码可运行
举报
运行总次数:0
代码可运行

前言

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

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

生成示例文件

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def mkfile(filename,content):
    with open(filename,'w') as f:
        f.write(content or filename)
    return

mkfile('filecmps/one.txt','1212121212')
mkfile('filecmps/two.txt','1212121212')
mkfile('filecmps/three.txt','333333333')

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

cmp()(比较文件)

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import filecmp

print(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()函数,示例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import filecmp

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

运行之后,效果如下:

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

dircmp()(比较目录)

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import filecmp

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

运行之后,效果如下:

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

示例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import filecmp

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

运行之后,效果如下:

left_list与right_list

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import filecmp

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

运行之后,效果如下:

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

忽略部分文件进行对比

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import filecmp

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

运行之后,效果如下:

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

其他属性

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import filecmp

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

运行之后,效果如下:

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

right_only:为右目录独有的文件

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import filecmp

dc = 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中)

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import filecmp

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import filecmp

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

运行之后,效果如下:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python开发_filecmp
filecmp模块用于比较文件及文件夹的内容,它是一个轻量级的工具,使用非常简单。python标准库还提供了difflib模块用于比较文件的内容。关于difflib模块,且听下回分解。
Hongten
2018/09/13
5360
Python 自动化业务服务监控
使用diffie模块实现文件内容差异对比。dmib作为 Python的标准库模块, 无需安装,作用是对比文本之间的差异,且支持输出可读性比较强的HTML文档,与 Linux 下的dif命令相似。我们可以使用 diffie对比代码、配置文件的差别,在版本控制方面是非 常有用。 Python3.x或更高版本默认自带 diffie模块,无需额外安装。
王瑞MVP
2022/12/28
4220
Python之文件内容管理
作为DBA,在日常运维管理中,经常会有一些文件内容等相关的处理需求,那么就可能会有这样的疑问:
SEian.G
2021/04/15
5110
Python自动化运维1
psutil是一个跨平台库,用于检索Python中运行的进程和系统利用率(CPU、内存、磁盘、网络、传感器)的信息。支持平台:
全栈工程师修炼指南
2022/09/28
2.6K0
Python自动化运维1
Python自动化运维1
psutil是一个跨平台库,用于检索Python中运行的进程和系统利用率(CPU、内存、磁盘、网络、传感器)的信息。支持平台:
全栈工程师修炼指南
2020/10/23
1.8K0
Python自动化运维1
#抬抬小手学Python# os 库、 sys 库、getopt 库 与 filecmp 库
在 Python 中 os 库提供了基本的操作系统交互功能,该库下包含大量与文件系统、操作系统相关的函数,通过 dir 函数可以查看。
程序员迪迪
2021/12/27
6910
【说站】Python中filecmp模块的介绍
2、有两个方法,filecmp.cmp比较两个文件的内容是否匹配和filecmp.cmpfile比较两个文件内指定文件是否相等。
很酷的站长
2022/11/26
3140
【说站】Python中filecmp模块的介绍
用Python除去重复文件
但是有可能循环到的文件已经被前面的判断删除了,所以加进来了exists判断存在与否
云深无际
2020/10/23
7420
用Python除去重复文件
10行Python代码自动清理电脑内重复文件,解放双手!
「给定一个文件夹,使用Python检查给定文件夹下有无文件重复,若存在重复则删除」
刘早起
2020/08/20
1.4K0
十行python代码实现文件去重,去除重复文件的脚本
shallow :默认为True,即只比较os.stat()获取的元数据(创建时间,大小等信息)是否相同,
Python学习者
2024/04/02
1200
Python 比较文本文件
我们需要比较一个文本文件 F 与路径下多个其他文本文件之间的差异。我们已经编写了以下代码,但只能输出一个文件的比较结果。我们需要修改代码,以便比较所有文件并打印所有结果。
用户11021319
2024/04/19
1490
Python 比较文本文件
自动同步2个目录python脚本
#!/usr/bin/python # -*- coding: utf8 -*- import os import sys import filecmp import re import shutil file_list = [] def recursive_dir(dir1):     """     递归当前目录的文件和子目录     :param dir1: 传参 需要递归的目录     :return: 当前目录下所有文件和目录     """     curDir = os.path.absp
py3study
2020/01/15
1.3K0
AI办公自动化-用kimi自动清理删除重复文件
你是一个Python编程专家,要完成一个编写Python脚本的任务,具体步骤如下:
AIGC部落
2024/06/24
1500
AI办公自动化-用kimi自动清理删除重复文件
Python同步文件
最近在做Python开发,研究了技术大牛写的脚本,在他的脚本上做了优化。优化脚本已在做过测试还是挺好用的,如果你觉得不错就直接拿到生产用吧。
py3study
2020/01/06
1K0
Python自动化运维2
描述:yaml配置文件与xml配置文件以及json配置文件的共同之处是在于方便理解与使用,是配置文件更加的简洁通俗易懂;
全栈工程师修炼指南
2020/10/23
3680
Python自动化运维2
Python实用脚本实践
练习: 1. 把 jpg,png,gif 文件夹中的所有文件移动到 image 文件夹中,然后删除 jpg,png,gif 文件夹  2. 把 doc,docx,md,ppt 文件夹中的所有文件移动到 document 文件夹中,然后删除
慕白
2020/01/02
7340
Python实用脚本实践
shutil:Python高级文件操作
普通的文件操作,我们一般只涉及创建文件,文件夹以及写入文件等等。假如我现在需要复制一个文件的内容到另一个文件之中,用pathlib等都只能先打开复制文件,然后进行将其读出来保存,然后再写入新的文件,这种普通的复制操作,无形之中增加了许多步骤。
luckpunk
2023/09/29
2610
shutil:Python高级文件操作
MySQL运行参数值变更巡检
前段时间阿里云RDS发通知对部分参数进行优化,在割接几天后,研发反馈说每日跑批耗时变长了,也就是说数据库变慢了。
保持热爱奔赴山海
2024/10/14
1060
实验六 异常处理实验
2、掌握raise和assert语句,会抛出自定义的异常,掌握with和as环境安装器的使用。
背雷管的小青年
2020/06/08
2K0
Python 文件操作与路径
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的博客 🍊个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 🥭本文内容:Python 文件操作与路径 ---- Python 文件操作与路径 1.文件与路径 2.文本文件与二进制文件 3.操作文件 3.1 打开文件 3.2 关闭文件 3.3 写入文本文件 3.4 读取文本文件 3.4.1 使用文件内置方法读取 3.4.2 使用 for 循环逐行读取 3.4.3 使用列表推导式和 ma
小嗷犬
2022/11/15
1.4K0
相关推荐
python开发_filecmp
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验