Python轮子:文件比较器——filecmp

原文链接:http://www.juzicode.com/python-module-filecmp

filecmp模块可以用来比较文件或者目录。

安装和导入

filecmp是Python自带的模块,不需要额外安装,直接导入即可:

import filecmp as fc
#或者
import filecmp

cmp()比较2个文件

直接调用cmp()函数就可以完成2个文件的比对。该函数接受3个入参,第1,2个入参是需要对比的2个文件路径,第3个入参shallow。如果shallow为True并且两个文件的os.stat()中的签名信息(文件类型、大小和修改时间)一致,则结果返回True。其他情况下如果文件大小或者文件内容不一样则结果返回False。

我们首先准备3个文件,分别为file-a.txt和它的拷贝file-a-copy.txt,以及file-b.txt,file-b.txt的内容和file-a.txt有差异。

#juzicode.com/VX公众号:juzicode
import filecmp as fc

fn1 = 'file-a.txt'
fn2 = 'file-a-copy.txt'   # 文件内容和file-a.txt一模一样
fn3 = 'file-b.txt'        # 文件内容和file-a.txt有差异

ret = fc.cmp(fn1,fn2)
print('文件%s 和文件%s 是否一样:'%(fn1,fn2), ret)

ret = fc.cmp(fn1,fn3)
print('文件%s 和文件%s 是否一样:'%(fn1,fn3), ret)

运行结果:

文件file-a.txt 和文件file-a-copy.txt 是否一样: True
文件file-a.txt 和文件file-b.txt 是否一样: False

cmpfiles()比较2个目录

cmpfiles(dir1, dir2, common, shallow=True)

其中dir1和dir2确定要比较的2个目录中。

common指定名称的文件,可以是列表或者元组。

返回值为3个列表:match, mismatch, errors。其中match为匹配的文件; mismatch为不匹配的文件;errors 列出那些因为各种原因没有被比较的文件,比如文件不存在于两目录中的任一个、缺少读取它们的权限等等。

参数shallow含义和filecmp.cmp()一致。

例如,cmpfiles(‘dir-a’, ‘dir-b’, [‘c.txt’, ‘d/e.txt’,’f.txt’]) 将会比较dir-a/c.txt与dir-b/c.txt以及dir-a/d/e.txt与dir-b/d/e.txt、dir-a/f.txt与dir-b/f.txt 。’c.txt’、’d/e.txt’、’f.txt’ 将会出现在返回值的某一个列表中。

#juzicode.com/VX公众号:juzicode
import filecmp as fc

dir1 = 'dir-a'  
dir2 = 'dir-b'

match, mismatch, errors = fc.cmpfiles(dir1,dir2,['c.txt','d\\e.txt','f.txt'])
print('一样的文件:', match)
print('不同的文件:', mismatch)
print('未能比较的文件:', errors)

运行结果:

一样的文件: ['d\\e.txt']
不同的文件: ['f.txt']
未能比较的文件: ['c.txt']

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值