详解如何使用Python实现删除重复文件

yizhihongxing

如何使用 Python 实现删除重复文件?

1. 查找重复文件

使用Python可以很方便地查找重复文件。其中,可以使用hashlib模块计算文件的哈希值,来判断是否为同一个文件。最简单的实现步骤如下所示。

  1. 遍历所需要查找的目录,找出其中所有的文件。
  2. 对于每一个文件,计算文件的哈希值。
  3. 如果哈希值等于目录中的其他某个文件的哈希值,则这两个文件为重复文件。
  4. 将重复文件存储在一个列表中,以备删除。

下面是一个查找重复文件功能的示例代码:

import os
import hashlib

# 获取指定目录下所有文件的路径
def get_files_list(path):
    files_list = []
    for root, dirs, files in os.walk(path):
        for name in files:
            files_list.append(os.path.join(root, name))
    return files_list

# 计算文件的哈希值
def get_file_md5(file_path):
    with open(file_path, 'rb') as f:
        md5obj = hashlib.md5()
        while True:
            data = f.read(1024)
            if not data:
                break
            md5obj.update(data)
        return md5obj.hexdigest()

def find_duplicate_files(path):
    file_md5_dict = {}
    duplicate_files = []
    files_list = get_files_list(path)
    for file_path in files_list:
        file_md5 = get_file_md5(file_path)
        if file_md5 in file_md5_dict:
            duplicate_files.append(file_path)
        else:
            file_md5_dict[file_md5] = file_path
    return duplicate_files

2. 删除重复文件

当找到重复文件后,我们就可以将重复文件删除。其中,删除文件可以使用Python自带的os库的os.remove方法。当然,在删除文件时,需要用户确认删除的操作,可以使用input实现。下面是删除重复文件的示例代码:

import os
import hashlib

# 获取指定目录下所有文件的路径
def get_files_list(path):
    files_list = []
    for root, dirs, files in os.walk(path):
        for name in files:
            files_list.append(os.path.join(root, name))
    return files_list

# 计算文件的哈希值
def get_file_md5(file_path):
    with open(file_path, 'rb') as f:
        md5obj = hashlib.md5()
        while True:
            data = f.read(1024)
            if not data:
                break
            md5obj.update(data)
        return md5obj.hexdigest()

def delete_duplicate_files(path):
    file_md5_dict = {}
    files_list = get_files_list(path)
    for file_path in files_list:
        file_md5 = get_file_md5(file_path)
        if file_md5 in file_md5_dict:
            delete_confirm = input(f"确认删除文件{file_path}吗?(Y/N)")
            if delete_confirm.lower() == 'y':
                os.remove(file_path)
                print(f"文件{file_path}删除成功!")
            else:
                print(f"文件{file_path}未删除!")
        else:
            file_md5_dict[file_md5] = file_path

示例

现在,假设我们在D:\test目录下有以下文件:

  • D:\test\file1.txt
  • D:\test\file2.txt(重复文件1)
  • D:\test\file3.txt
  • D:\test\another\file4.txt
  • D:\test\another\file5.txt(重复文件2)

我们可以使用以下代码进行查找并删除重复文件:

path = "D:\test"
duplicate_files = find_duplicate_files(path)
print(f"重复文件有:{duplicate_files}")
delete_duplicate_files(path)

运行结果为:

重复文件有:['D:\\test\\file2.txt', 'D:\\test\\another\\file5.txt']
确认删除文件D:\test\file2.txt吗?(Y/N)y
文件D:\test\file2.txt删除成功!
确认删除文件D:\test\another\file5.txt吗?(Y/N)n
文件D:\test\another\file5.txt未删除!

可以看到,程序正确地找到了两个重复文件,并删除了其中的一个。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解如何使用Python实现删除重复文件 - Python技术站

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

相关文章

  • Python采集某度贴吧排行榜实战示例

    Python采集某度贴吧排行榜实战示例 前言 网页上的数据采集在现在的数据处理中占用了重要的地位,而Python作为一种通用的编程语言,在数据处理中也占用了很大的优势。下面,我们将介绍采集某度贴吧排行榜的实战示例。 准备工作 在开始操作之前,需要先安装一些Python库: pip install requests pip install beautifuls…

    python 2023年6月3日
    00
  • 对Python3中bytes和HexStr之间的转换详解

    针对题目所要求的内容,下面是“对Python3中bytes和HexStr之间的转换详解”的完整攻略。 什么是bytes和HexStr 在Python 3中,有两种二进制数据类型:bytes和bytearray。bytes是不可修改的,并且包含一个0到255之间的整数序列;而bytearray则是可修改的bytes。而HexStr则是表示十六进制数的字符串。在…

    python 2023年5月31日
    00
  • Python中collections模块的基本使用教程

    下面是Python中collections模块的基本使用教程, 1. collections模块简介 collections模块是Python标准库中的一个模块,提供了一系列的容器类,实现了Python中没有的一些特定数据结构,例如:有序字典、命名元组等。使用这些容器类可以大大提高编码的效率,使得代码更加简洁、易读。 2. Counter计数器 Counte…

    python 2023年5月13日
    00
  • 详解Python PIL的GaussianBlur()方法

    Python PIL(Python Imaging Library)是一种用于图像处理的Python库,其中提供的GaussianBlur()方法可以用于对图像进行高斯模糊处理。以下是关于Python PIL的GaussianBlur()方法的完整攻略: 1. 导入PIL库 在使用GaussianBlur()方法之前,需要先导入PIL库,并安装合适的版本。在…

    python-answer 2023年3月25日
    00
  • Python实现全局变量的两个解决方法

    下面我将详细讲解“Python实现全局变量的两个解决方法”的完整攻略。 前言 在 Python 中,可以使用全局变量来管理数据。但是在使用全局变量时需要注意,因为全局变量会受到 Python 解释器的影响和其他因素的影响而修改。所以,需要合理地使用全局变量,避免代码出现不可预知的错误。 解决方法一:使用 global 关键字 使用 global 关键字可以在…

    python 2023年5月19日
    00
  • 详解Python PIL ImageChops.constant()

    Python PIL库中的ImageChops模块提供了常见的图像处理函数。其中,ImageChops.constant函数允许我们针对输入图像创建一个常量值图像,并返回这个常量值图像。 以下是ImageChops.constant函数的完整攻略: 函数定义 ImageChops.constant(mode, size, color) 参数说明 mode: …

    python-answer 2023年3月25日
    00
  • 使用 Python 的 Bigtable 模拟器和 Google 发现资源

    【问题标题】:Bigtable Emulator & Google Discovery Resource with Python使用 Python 的 Bigtable 模拟器和 Google 发现资源 【发布时间】:2023-04-03 00:56:01 【问题描述】: 我正在尝试在 python 的 googleapiclient.discove…

    Python开发 2023年4月8日
    00
  • python实现ID3决策树算法

    下面是详细讲解“Python实现ID3决策树算法”的完整攻略,包括算法原理、Python实现和两个示例。 算法原理 ID3决树算法是一种基于信息的决策算法,其主要思想是通过计算每个特征的信息增益,选择信息增益大的特征作为当前节点划分特征,然后递归地构建决策树。具体实现时,需要计算每个特征的信息熵和条件熵,以信息增益,然后选择信息增益最大的特征进行划分。 Py…

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