教你用Python寻找重复文件并删除的脚本写法

教你用Python寻找重复文件并删除的脚本,可以分为以下步骤:

1. 导入必要的库

我们需要用到os库和hashlib库。其中os库用于操作文件,获取路径等操作,hashlib库用于计算文件的哈希值,以判断文件是否相同。

import os
import hashlib

2. 定义函数

我们需要先定义两个函数,分别用于计算文件的哈希值和寻找重复文件。这里我们使用SHA-256算法计算哈希值,可以自由选择其他算法,如MD5等。

def sha256sum(filename):
    with open(filename, "rb") as f:
        data = f.read()
    return hashlib.sha256(data).hexdigest()

def find_duplicates(folder):
    D = {}
    for dirpath, dirnames, filenames in os.walk(folder):
        for filename in filenames:
            fullpath = os.path.join(dirpath, filename)
            hashvalue = sha256sum(fullpath)
            if hashvalue in D:
                D[hashvalue].append(fullpath)
            else:
                D[hashvalue] = [fullpath]
    return [x for x in D.values() if len(x)>1]

以上两个函数都比较简单,第一个函数接收一个文件名参数,将文件的全部数据读入内存,然后计算并返回SHA-256哈希值。第二个函数接收一个路径参数,使用os库的os.walk函数遍历路径下的所有文件,并计算它们的哈希值,将哈希值与文件路径建立映射关系,存储在一个字典中。最后筛选出字典中哈希值对应的文件列表长度大于1的条目,并返回。

3. 删除重复文件

删除重复文件最好做好备份,不然数据丢失后果自负。本例中,我们只讲解删除代码的部分。这段代码是在函数find_duplicates函数之后,将返回的相同文件清单循环遍历,每组文件中只保留一份,其他删去。

for paths in duplicates:
    for i in range(1, len(paths)):
        os.remove(paths[i])
        print("removed", paths[i])

以上代码中,我们先遍历每一组相同文件,然后从下标1开始循环删除,即将除第一份外的文件全部删除。

示例

在代码中,我们可以设置一个测试路径。例如:

if __name__ == '__main__':
    test_folder = "./test_folder"
    duplicates = find_duplicates(test_folder)
    for paths in duplicates:
        print(paths)
    delete_duplicates(duplicates)

假设我们在当前目录下创建了一个test_folder目录,并在其中添加两个文件,内容相同但文件名不同,如下:

./test_folder/file1.txt
./test_folder/file2.txt

然后运行代码。输出如下:

['./test_folder/file1.txt', './test_folder/file2.txt']
removed ./test_folder/file2.txt

输出表示找到了一组重复文件,并且已将其中一个文件删除。

另外,如果你想测试真实场景,可以使用更大的文件进行测试。例如,将多个同样的大型视频文件放置在同一文件夹中,这样就可以看到代码的实际使用情况。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:教你用Python寻找重复文件并删除的脚本写法 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • python使用dlib进行人脸检测和关键点的示例

    下面是详细的“python使用dlib进行人脸检测和关键点的示例”的攻略。 准备工作 为了使用dlib完成人脸检测和关键点检测,我们需要安装dlib、numpy和opencv-python等依赖库。可以使用如下命令进行安装: pip install dlib pip install numpy pip install opencv-python 示例1 我们…

    python 2023年6月6日
    00
  • 跟老齐学Python之用while来循环

    跟老齐学Python之用while来循环 什么是while循环? 在Python编程语言中,while 循环是一种常见而又重要的代码结构,用于重复执行指定的代码块,直到给定的条件不再成立为止。当你需要重复执行某个代码块,但不确定循环次数时,while 循环就显得特别有用。 在程序中使用while循环可以达到多次重复执行一段代码的效果,直到不再满足某种条件为止…

    python 2023年5月30日
    00
  • 关于pytest结合csv模块实现csv格式的数据驱动问题

    关于pytest结合csv模块实现csv格式的数据驱动问题的攻略如下: 1. 安装pytest和csv模块 在使用pytest和csv模块之前,需要先安装这两个模块。可以使用pip install命令来安装: pip install pytest pip install csv 2. 准备测试数据 在使用csv模块之前,需要准备好测试数据所在的csv文件。假…

    python 2023年6月3日
    00
  • 关于微信小程序爬虫token自动更新问题

    现在我就来详细讲解“关于微信小程序爬虫token自动更新问题”的完整攻略。 什么是微信小程序爬虫token? 微信小程序爬虫token指的是在爬取微信小程序数据时所需要的token参数。因为微信小程序在服务器端进行了保护,需要携带有效的token参数才能够正常获取数据。 为什么需要自动更新token? 由于微信官方对爬虫的限制越来越严格,用户每次爬取小程序数…

    python 2023年5月23日
    00
  • Python3.5 + sklearn利用SVM自动识别字母验证码方法示例

    Python3.5 + sklearn利用SVM自动识别字母验证码方法示例 在本文中,我们将介绍如何使用Python3.5和sklearn库,来使用基于支持向量机(SVM)的方法,自动识别字母验证码。 1. 库的安装 首先,我们需要安装Python3.5和sklearn库。如果您是使用Anaconda发行版,可以通过以下命令来安装这些库: conda ins…

    python 2023年5月18日
    00
  • python通过BF算法实现关键词匹配的方法

    以下是关于“Python通过BF算法实现关键词匹配的方法”的完整攻略: 简介 BF算法是一种简单的字符串匹配算法,它通过暴力枚举的方式在文本中查找关键词。本教程将介绍如何使用Python通过BF算法实现关键词匹配,并提供两个示例。 算法实现 BF算法是一种简单的字符串匹配算法,它通过暴力枚举的方式在文本中查找关键词。具体来说,我们将关键词从文本的第一个字符开…

    python 2023年5月14日
    00
  • python 队列基本定义与使用方法【初始化、赋值、判断等】

    Python 队列基本定义与使用方法 队列(Queue)是一种线性数据结构,它具有先进先出的特点。即先进入队列的元素,先出队列。 Python中的队列可以使用collections库中的deque双端队列来实现。deque是一个双向队列,支持在两端进行插入和删除操作,实现了O(1)的时间复杂度。 初始化队列 可以使用collections库中的deque,也…

    python 2023年6月6日
    00
  • Python必备技巧之字符数据操作详解

    Python必备技巧之字符数据操作详解 字符数据类型 在Python中,字符串是一种常见的数据类型。字符串是一个由字符序列组成的不可变序列。因为字符串不可变,因此不能像列表一样进行就地修改。字符串可以使用单引号或双引号来表示。 字符串连接和重复 字符串可以连接起来形成新的字符串。连接操作可以使用+运算符或通过字符串插值完成。例如: str1 = "…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部