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

如何使用 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获取字符串中的email

    在Python中,使用正则表达式可以方便地提取字符串中的email地址。以下是一个详细的攻略,包括基本语法和示例说明。 1. 正则表达式基本语法 在Python中,使用re模块可以方便地使用正则表达式。以下是一个基本的正则表达式示例: import re pattern = r’\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z…

    python 2023年5月14日
    00
  • 利用python对excel中一列的时间数据更改格式操作

    这里是利用Python对Excel中一列的时间数据更改格式的完整实例教程: 准备工作 安装Python,并配置好环境变量。 安装Python的第三方库xlrd和xlwt。可以使用pip命令进行安装: pip install xlrd pip install xlwt 准备Excel文件,其中包含需要更改格式的时间数据。 实现步骤 导入xlrd和xlwt库。 …

    python 2023年5月13日
    00
  • Python第三方库安装教程、什么是第三方库

    Python有一个全球社区:https://pypi.org/,在这里我们可以搜索任何主题的Python第三方库。PyPI全称是Python Package Index,指的是Python包的索引,它由PSF(Python Software Foundation)来维护,并且展示全球Python计算生态。 我们需要学会利用PyPI的主站检索,找到我们使用和关…

    python 2023年5月8日
    00
  • Python 时间操作datetime详情(下)

    Python 时间操作datetime详情(下) 在Python中我们可以使用datetime库进行时间的操作。在上一篇文章中我们已经讲过datetime库的大部分用法,本文将继续介绍较为复杂的用法并提供示例说明。 时间转换与格式化 datetime与时间戳的转换 在程序中我们可能会需要将datetime类型转换为时间戳或将时间戳转换为datetime类型,…

    python 2023年6月2日
    00
  • Python 数据的累加与统计的示例代码

    Python是一门强大的编程语言,可以用来进行数据处理和分析。在数据分析中,经常需要进行数据的累加和统计。下面是Python数据的累加和统计的示例代码攻略。 累加示例 下面是一个简单的示例,演示如何逐步对数据进行累加。 total = 0 # 初始值为0 for i in range(1, 11): # 对列表[1, 2, …, 10]中的每个值进行累加…

    python 2023年5月31日
    00
  • python输入中文的实例方法

    当我们在处理中文字符串时,需要在程序中实现对中文的输入和输出,其中输入中文是比较常见的需求。本文将介绍Python针对输入中文的实例方法。 安装所需库 首先,我们需要安装pyperclip库,这个库的作用是从剪切板中获取文本字符串。可以通过以下命令进行安装: pip install pyperclip 实现输入中文的方法 以下是输入中文的方法: import…

    python 2023年5月20日
    00
  • Python序列类型的打包和解包实例

    下面是关于Python序列类型的打包和解包实例的完整攻略。 Python序列类型的打包和解包 在Python中,打包指的是将两个或多个变量值赋给一个变量,而解包则是将一个变量的多个值赋给多个变量。 打包 打包的过程就是将多个值用一个变量封装起来,形成一个新的对象。在Python中,可以将多个变量值放在一对圆括号()中,用逗号分隔即可完成打包操作,这个新的对象…

    python 2023年5月14日
    00
  • Python 制作查询商品历史价格的小工具

    Python制作查询商品历史价格的小工具 在本教程中,我们将介绍如何使用Python制作一个查询商品历史价格的小工具。我们将使用Python的requests库和BeautifulSoup库来实现这个功能。以下是一个完整攻略,含两个示例。 步骤1:获取商品历史价格数据 首先,我们需要获取商品历史价格数据。我们可以使用requests库发送HTTP请求,并使用…

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