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

简介: 在前一篇我们以及说了如何搜索文件,详细查看【通用文件操作】文件搜索。今天我们来看看如何查找重复文件。在我们微信、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中的匹配规则即可。

目录
相关文章
|
6月前
|
算法 前端开发
在系统中查找重复文件
在系统中查找重复文件
74 0
|
1月前
|
IDE 开发工具 iOS开发
Python编程案例:查找指定文件大小的文件并输出路径
Python编程案例:查找指定文件大小的文件并输出路径
|
5月前
|
存储
文件操作(下)(想要了解如何操作文件,那么看这一片就足够了!)
文件操作(下)(想要了解如何操作文件,那么看这一片就足够了!)
文件操作(下)(想要了解如何操作文件,那么看这一片就足够了!)
|
6月前
|
C语言
C 语言文件处理全攻略:创建、写入、追加操作解析
在 C 语言中,您可以通过声明类型为 FILE 的指针,并使用 fopen() 函数来创建、打开、读取和写入文件:
236 0
|
5月前
|
存储 编译器 Windows
文件操作(上)(想要了解如何操作文件,那么看这一片就足够了!)
文件操作(上)(想要了解如何操作文件,那么看这一片就足够了!)
|
C语言
【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 逐行遍历文件文本数据 | 获取文件中的文本行 | 查询文本行数据 | 追加文件数据 | 使用占位符方式拼接字符串 )
【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 逐行遍历文件文本数据 | 获取文件中的文本行 | 查询文本行数据 | 追加文件数据 | 使用占位符方式拼接字符串 )
260 0
|
Java
IO案例,集合到文件数据排序、复制单级和多级文件夹及复制文件的异常处理
IO案例,集合到文件数据排序、复制单级和多级文件夹及复制文件的异常处理的简单示例
73 1
IO案例,集合到文件数据排序、复制单级和多级文件夹及复制文件的异常处理
读取文件结束的判定的概念,使用方法和文件缓冲区的位置
读取文件结束的判定的概念,使用方法和文件缓冲区的位置
135 0
|
安全 Python
【通用文件操作】删除空文件夹
对于有强迫症的人来说,空文件夹是不允许存在的东西,而电脑中文件又特别多,而且空文件夹也不好找,要一个一个删除真的是太麻烦了,今天就和大家分享一下删除空文件夹的操作。文章比较啰嗦,读者可以直接跳到最后一段。
491 0
|
C语言
【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 追加键值对数据 | 更新键值对数据 )
【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 追加键值对数据 | 更新键值对数据 )
133 0