【通用文件操作】查找重复文件

简介: 在前一篇我们以及说了如何搜索文件,详细查看【通用文件操作】文件搜索。今天我们来看看如何查找重复文件。在我们微信、QQ中,经常会我们每发送一次文件就会给我们在本地保存一份。我们可以使用今天的内容来实现重复文件的删除。

一、前言

在前一篇我们以及说了如何搜索文件,详细查看【通用文件操作】文件搜索。今天我们来看看如何查找重复文件。在我们微信、QQ中,经常会我们每发送一次文件就会给我们在本地保存一份。我们可以使用今天的内容来实现重复文件的删除。

二、对比文件

查找重复文件有两种办法,第一种就是对比文件信息。如果两个文件创建时间、修改时间、大小等都是一样的,那么我们可以肯定它们是一个文件。这是比较简单的一种对比方式,代码如下:

import os
st1 = os.stat('test1.txt')
st2 = os.stat('test2.txt')
# 将文件的模式和大小放进一个元组
sig1 = (st1.st_mode, st1.st_size)
sig2 = (st2.st_mode, st2.st_size)
# 比较两个文件的信息
if sig1 == sig2:
    print('两个文件一样')
else:
    print('两个文件不一样')
复制代码

这里我们选取了文件的两个属性来对比,分别是文件的模式和文件大小。这里我们还可以对比更多内容,这里我们就详细看了。

第二种方式就是直接对比文件的内容,在Python中内置了一个filecmp模块用于对比文件。具体代码如下:

import filecmp
# 对比两个文件是否一样
same = filecmp.cmp('test1.txt', 'test2.txt')
print(same)
复制代码

我们调用了filecmp.cmp函数,传入两个文件的路径。这里cmp函数会先对比文件的属性,就和我们开始写的类似,如果属性相同就直接返回True,如果不同就再对比文件内容,这样可以减少一部分工作。

三、查找重复文件

这里我们可以结合前一篇的内容,前一篇连接在文件前言部分。我们搜索指定应用中的重复文件,比如我们想要查找SQLyog中与现有的test.sql重复的文件,我们可以通过下面的方式来实现:

import os
import filecmp
from fnmatch import fnmatch
# 要查找的文件
f1 = "test.sql"
basedir = r"D:\\"
for root, dirs, files in os.walk(basedir):
    for file in files:
        path = os.path.join(root, file)
        # 只有在路径符合*SQLyog*.sql规范才进行文件比较
        if fnmatch(path, "*SQLyog*.sql") and filecmp.cmp(f1, path):
            print(path, "与", f1, "是重复文件")
复制代码

这里需要注意,我们已知了SQLyog的目录是SQLyog,而且文件后缀为sql,因此我们先进行文件搜索。当搜索到了符合规范的文件我们才开始进行内容比较,这样可以更高效。如果要找微信中的重复文件,我们只需要按照微信的目录规则编写fnmatch中的匹配规则即可。

目录
相关文章
|
设计模式 敏捷开发 JavaScript
开箱即用的中后台管理模版,建议收藏!
开箱即用的中后台管理模版,建议收藏!
1386 0
12 个非常适合做项目的开源后台管理系统
12 个非常适合做项目的开源后台管理系统
2975 0
|
9月前
|
SQL 自然语言处理 BI
另辟蹊径的 Text2SQL,不用大模型也能搞 chatBI
润乾报表NLQ组件摒弃大模型路线,采用规则词典与领域知识库,将自然语言精准转化为MQL查询语言,实现稳定、低成本、可维护的ChatBI。其核心在于结构化语义解析,避免“幻觉”,支持复杂多表关联与计算,适用于企业级BI场景,是可靠高效的自然语言查询解决方案。
|
9月前
|
SQL XML 自然语言处理
Text2SQL 破局技术解析之一:规范文本与灵活性
润乾NLQ创新采用“规范文本”作为中间层,将自然语言转SQL分为三阶段:LLM生成可读的规范文本,用户确认意图后,通过规则引擎转为MQL再生成准确SQL。该方案兼顾灵活性、准确性与复杂查询支持,大幅降低企业实施成本,为人机协同的Text2SQL提供了可行的工程化路径。
|
9月前
|
SQL 自然语言处理 算法
Text2SQL 破局技术解析之二:MQL 实现与复杂性
本文深入解析润乾NLQ架构中MQL的设计逻辑与实现机制。作为规范文本的确定性编译目标,MQL通过四类查询范式,构建精确语义基准,消除自然语言歧义。结合DQL的维度关联与SPL的复杂计算,形成层次清晰、协同高效的Text2SQL解决方案,平衡表达力与规范性,支撑企业级BI分析。(238字)
|
8月前
|
SQL 存储 人工智能
Text2SQL 破局技术解析之三:NLQ 词典与准确性
本文深入解析润乾NLQ的“大脑”——NLQ词典,揭示其如何通过表与实体、宏字段、字段簇、维词、量词等结构化规则,将自然语言精准转化为MQL。词典作为语义映射核心,结合可视化设计与业务封装,实现高准确、可解释、易维护的Text2SQL方案,破解灵活性、准确性与复杂性三难困境。
|
计算机视觉 Python
Python实用记录(一):如何将不同类型视频按关键帧提取并保存图片,实现图片裁剪功能
这篇文章介绍了如何使用Python和OpenCV库从不同格式的视频文件中按关键帧提取图片,并展示了图片裁剪的方法。
921 0
|
安全 网络协议 网络安全
【网络连接】ping不通的常见原因+解决方案,如何在只能访问网关时诊断,并修复IP不通的问题
【网络连接】ping不通的常见原因+解决方案,如何在只能访问网关时诊断,并修复IP不通的问题
36113 0
|
数据挖掘 测试技术 开发工具
鸿蒙开发:hvigorw,编译构建,实现命令打包
以上呢,就是hvigorw几个常见的命令,主要用于构建不同类型的包,也是接下来流水线打包,几个比较常用的命令,所以拿来重点概述了,当然了hvigorw还有一些常见的命令,大家直接看官网介绍即可,不在多赘述。
685 0
鸿蒙开发:hvigorw,编译构建,实现命令打包

热门文章

最新文章