Python自动清理重复文件:利用os、glob与filecmp模块实现

认真发呆
认真发呆
发布时间:2026-10-14| 5人浏览过
原创

本文介绍如何使用Python自动清理指定文件夹下的重复文件。通过结合[[wp:a0]]、[[wp:a1]]和[[wp:a2]]模块,遍历获取文件路径并两两比较内容。文章详细讲解了利用[[wp:a3]]模块判断文件是否相同的方法,包括[[wp:a4]]与[[wp:a5]]返回值及[[wp:a6]]参数对[[wp:a7]]签名比较的影响。代码实现了路径获取、列表过滤及去重删除逻辑,并处理了文件被提前删除时的[[wp:a21]]存在性检查,确保脚本稳定运行。

Python自动清理重复文件:利用os、glob与filecmp模块实现

前言

大家好,欢迎回到Python办公自动化系列教程。

今天我们将分享一个系统层面的自动化处理案例。

目标是:给定一个文件夹,使用Python检查该文件夹下是否存在重复文件,若存在则自动删除重复项。

本案例主要涉及以下核心知识点:

  • os模块的综合应用
  • glob模块的综合应用
  • 利用filecmp模块进行文件内容比较

步骤分析与逻辑拆解

步骤分析

该程序的实现逻辑可以具体拆解为以下步骤:

首先遍历获取指定文件夹下的所有文件,然后通过嵌套循环两两比较文件是否相同,如果确认相同则删除后一个文件。

实现这一功能的关键问题在于:

如何准确判断两个文件是否相同?

我们可以使用filecmp模块来解决这个问题,下面参考官方文档说明:

  • filecmp.cmp(f1, f2, shallow=True)
  • 该函数用于比较名为f1和f2的文件,如果它们看似相等则返回True,否则返回False。
  • 当shallow参数为真时,仅具有相同os.stat()签名的文件会被视为相等;否则,程序将比较文件的实际内容。

因此,我们可以按照如下方式使用该模块:


# 假设x和y两个文件是相同的
print(filecmp.cmp(x, y))
# True

解决了文件比较的问题后,我们就可以开始编写具体代码了。

Python代码实现与细节处理

Python代码实现

首先导入所需的库,并设置目标文件夹的路径。


import os
import glob
import filecmp

dir_path = r'C:\\xxxx'

接下来,我们需要遍历获取所有文件的绝对路径。利用glob模块的通配符功能,并结合recursive参数进行递归搜索,即可完成路径获取,基本框架如下:


for file in glob.glob(path + '/**/*', recursive=True):
  pass

在遍历获取每个文件或文件夹后,需要判断其是否为文件。如果是文件,则将其绝对路径存入列表中。这里需要完成两个具体操作:

  1. 首先创建一个空列表,后续使用list.append(i)方法将文件路径添加进去。
  2. 接着利用os.path.isfile(i)函数判断对象是否为文件,若返回True则执行添加元素的操作。

具体代码如下:


file_lst = []

for i in glob.glob(dir_path + '/**/*', recursive=True):
  if os.path.isfile(i):
    file_lst.append(i)

上一步我们获取了目标文件夹下的所有文件路径列表,接下来就可以通过嵌套遍历该列表来执行去重操作。其中filecmp.cmp用于进行文件判断,os.remove用于执行文件删除。


for x in file_lst:
  for y in file_lst:
    if x != y:
      if filecmp.cmp(x, y):
        os.remove(y)

上述代码已实现大致逻辑,但有一个细节需要注意:在循环过程中,文件可能已被前面的判断逻辑删除,导致os.remove(file)因文件不存在而报错。

因此,可以使用os.path.exists对文件是否存在进行预先判断,如下所示:


for x in file_lst:
  for y in file_lst:
    if x != y and os.path.exists(x) and os.path.exists(y):
      if filecmp.cmp(x, y):
        os.remove(y)

这样,一个简易的文件去重小程序就完成了,完整代码如下:


import os
import glob
import filecmp

dir_path = r'C:\xxxx'

file_lst = []

for i in glob.glob(dir_path + '/**/*', recursive=True):
  if os.path.isfile(i):
    file_lst.append(i)

for x in file_lst:
  for y in file_lst:
    if x != y and os.path.exists(x) and os.path.exists(y):
      if filecmp.cmp(x, y):
        os.remove(y)

总结与应用建议

写在最后

通过本文的Python自动化脚本制作过程,我们可以再次体会Python在办公自动化领域的强大能力。同时,本次实现的功能可以与之前介绍过的自动整理文件脚本结合使用,提升工作效率。

以上就是Python实现自动清理重复文件的详细内容,更多关于Python清理重复文件的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。