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

yizhihongxing

教你用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数据类型强制转换实例详解

    Python数据类型强制转换实例详解 在Python中,数据类型之间的转换是一个重要的概念。Python提供了很多数据类型强制转换的函数来完成不同类型数据之间的转化。本文将详细介绍数据类型强制转换的实例,包括字符串、数字、列表、元组和字典等常见数据类型的转换。 字符串转整型 在Python中,我们可以使用int()函数将字符串转换为整型。若字符串不能被正确转…

    python 2023年5月14日
    00
  • Python格式化输出字符串的五种方法总结

    Python格式化输出字符串的五种方法总结 Python中的字符串格式化可以让我们在输出字符串时灵活控制其格式,具有非常重要的作用。本文总结了Python格式化输出字符串的五种方法。下面将为您详细讲解每种方法。 1. %占位符 在Python中,使用“%”进行字符串格式化是最基础和最常用的方法,也是Python2时代最常用的方法。 格式化字符串时,可以使用一…

    python 2023年6月5日
    00
  • Python之requests的使用(二)

    以下是关于Python之requests的使用(二)的攻略: Python之requests的使用(二) requests是Python中一个流行的HTTP库,可以用于向Web服务器发送HTTP请求和接收响应。以下是Python中requests模块的更多用法: 发送JSON数据 以下是使用requests模块发送JSON数据的示例: import requ…

    python 2023年5月14日
    00
  • Python tkinter实现计算器功能

    下面是“Python tkinter实现计算器功能”的完整攻略: 1. 前置知识 在开始使用tkinter实现计算器之前,需要具备以下知识: Python3编程基础 tkinter的基本使用方法 GUI编程的基本概念和视图控制等概念 2. 计算器的界面设计 首先需要创建一个窗口,并在此窗口上设置Label文本框和Button按钮,需要考虑到计算器的基本功能和…

    python 2023年6月3日
    00
  • Python多进程方式抓取基金网站内容的方法分析

    下面是“Python多进程方式抓取基金网站内容的方法分析”的完整攻略。 理解多进程方式 Python多进程方式是用于实现进程并发的一种技术,可以利用多个CPU核心、降低程序单次执行时间、提高系统资源利用率等特点,进行高效的并行处理和资源调度。在抓取基金网站内容时,多进程方式可以有效提高爬取速度,提高效率。 实现多进程方式 导入必要库 首先,需要导入多进程、时…

    python 2023年6月7日
    00
  • Python利用yield form实现异步协程爬虫

    让我们来详细讲解一下“Python利用yield from实现异步协程爬虫”的完整攻略。 什么是异步协程 在介绍异步协程之前,先了解一下同步、异步、阻塞和非阻塞的概念。 同步指的是调用一个函数时需要等待其执行结束后才能执行下一步操作; 异步指的是调用一个函数时不需要等待其执行结束,会继续执行下一步操作,但是需要一个通知机制告诉调用者何时执行结束; 阻塞指的是…

    python 2023年6月3日
    00
  • pip指定python位置安装软件包的方法

    在使用pip安装Python软件包时,我们有时需要指定安装Python的位置,这在同一台机器上有多个Python版本时非常重要。下面是指定Python位置安装软件包的完整攻略: 查看Python的安装路径 在Windows系统中,可以在命令行中输入where python或where python3来查找Python的安装路径。而在Linux或macOS系统…

    python 2023年5月14日
    00
  • Python批量处理工作簿和工作表的实现示例

    下面我会详细讲解一下“Python批量处理工作簿和工作表的实现示例”的完整实例教程。 1. 环境设置 首先,需要安装openpyxl库和pandas库。可以使用pip命令进行安装。 !pip install openpyxl !pip install pandas 2. 批量处理工作表 我们可以使用openpyxl库中的load_workbook()方法来读…

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