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

目录
  • Python自动化办公之删除重复文件
    • 思路介绍
    • 源码解说
    • 知识拓展

Python自动化办公之删除重复文件

思路介绍

两层判断:

1.先判断文件大小是否为相同,大小不同则不是重复文件,予以保留;

2.文件大小相同再判断文件md5,md5相同,则是重复文件,予以删除。

源码解说

from pathlib import Path
import hashlib

def getmd5(filename):
    # 接收文件路径,返回文件md5值
    with open(filename, 'rb') as f:
        data = f.read()
    file_md5 = hashlib.new("md5", data).hexdigest()
    return file_md5

def main():
    path = r"F:\FileRecv\删除文件测试"
    all_size = {}
    total_file = 0
    total_delete = 0

    # 获取路径内的所有文件名,默认是升序排列,相同文件将会保留日期时间最新的
    all_files = Path(path).glob('*.*')

    # 降序排列,相同文件将会保留文件名最短的(即日期时间最久的)
    all_files = sorted(all_files, reverse=True)

    # 遍历文件路径内的所有文件
    for file in all_files:
        # 获取文件所占字节大小,作为数据字典的键
        size = file.stat().st_size
        # name_and_md5列表用于存储文件绝对路径和md5值,作为数据字典的值
        name_and_md5 = [file, '']

        # 针对重复文件进行处理,生成字典存储相关信息
        # 字典all_size中key是size,value是name_and_md5列表
        # 针对相同size的文件,再调用getmd5函数,获取文件的md5值
        # 文件size不同(不在all_size.keys()中),则自动判断为不同的文件,予以保留
        if size in all_size.keys():
            # 调用getmd5函数,获取文件的md5值
            new_md5 = getmd5(file)
            if all_size[size][1] == '':
                all_size[size][1] = getmd5(all_size[size][0])
            # 判断md5值存在,即文件重复,则删除文件。md5值不存在,则把md5值加入列表中
            if new_md5 in all_size[size]:
                file.unlink()
                total_delete += 1
            else:
                all_size[size].append(new_md5)
        else:
            all_size[size] = name_and_md5
        total_file += 1

    print(f'文件总数:{total_file}')
    print(f'删除个数:{total_delete}')

if __name__ == '__main__':
    main()

效果图:

代码说明:特别感谢瑜亮老师提供的代码!

知识拓展

pathlib和os,os.path常用的函数对应关系

pathlib常用方法介绍:

Path(path).name  # 返回文件名+文件后缀

Path(path).stem  # 返回文件名

Path(path).suffix  # 返回文件后缀

Path(path).suffixes  # 返回文件后缀列表

Path(path).root  # 返回根目录

Path(path).parts  # 返回文件

Path(path).anchor  # 返回根目录

Path(path).parent  # 返回父级目录

Path(path).parents  # 返回所有上级目录的列表

Path.exists()  # 判断 Path 路径是否是一个已存在的文件或文件夹

Path.is_dir()  # 判断 Path 是否是一个文件夹

Path.is_file()  # 判断 Path 是否是一个文件

Path.mkdir()  # 创建文件夹

Path.rmdir()  # 删除文件夹,文件夹必须为空

Path.unlink()  # 删除文件

到此这篇关于详解如何使用Python实现删除重复文件的文章就介绍到这了,更多相关Python删除重复文件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 利用Python删除电脑中重复文件的方法

    目录 前言 练习 代码演示 总结 前言 在生活中,我们经常会遇到电脑中文件重复的情况.在文件较少的情况下,这类情况还比较容易处理,最不济就是一个个手动对比删除:而在重复文件很多的时候,我们很难保证把重复文件全部删完.下面文章就来简单介绍便捷一个小方法,用Python来删除重复文件 练习 Python提供一个内置电脑文件管理库os模块,我们可以利用它来删除多余文件. 当一个文档里存在重复文件名,我们的系统会自动给我们重复的文件名更名, 比如下图的文件“1”重复了3次:  那我们该怎么删除文件“1”

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

    在实际生活中,经常会有文件重复的困扰,即同一个文件可能既在A目录中,又在B目录中,更可恶的是,即便是同一个文件,文件名可能还不一样.在文件较少的情况下,该类情况还比较容易处理,最不济就是one by one的人工比较——即便如此,也很难保证你的眼神足够犀利.倘若文件很多,这岂不是个impossible mission?最近在看<Python UNIX和Linux系统管理指南>,里面就有有关“数据比较”的内容,在其基础上,结合实际整理如下. 该脚本主要包括以下模块:diskwalk,chechs

  • Python实现删除重复文件的示例代码

    此程序主要是针对某个目录下的全部文件进行筛选,会删除重复的文件. 原理很简单,会计算每个文件的哈希,将哈希存入一个字典,文件名对应哈希. import os import hashlib def hash_file(filename): """Return the SHA-1 hash of the file content.""" h = hashlib.sha1() with open(filename, 'rb') as f: while

  • python删除本地夹里重复文件的方法

    上次的博文主要说了从网上下载图片,于是我把整个笑话网站的图片都拔下来了,但是在拔取的图片中有很多重复的,比如说页面的其他图片.重复发布的图片等等.所以我又找了python的一些方法,写了一个脚本可以删除指定文件夹里重复的图片. 一.方法和思路 1.比对文件是否相同的方法:hashlib库里提供了获取文件md5值的方法,所以我们可以通过md5值来判定是否图片相同 2.对文件的操作:os库里有对文件的操作方法,比如:os.remove()可以删除指定的文件, os.listdir()可以通过指定文件

  • Python实现的删除重复文件或图片功能示例【去重】

    本文实例讲述了Python实现的删除重复文件或图片功能.分享给大家供大家参考,具体如下: 通过python爬虫或其他方式保存的图片文件通常包含一些重复的图片或文件, 通过下面的python代码可以将重复的文件删除以达到去重的目的.其中,文件目录结构如下图: # /usr/bin/env python # -*- coding:utf-8 -*- # 运行的代码文件要放到删除重复的文件或图片所包含的目录中 import os import hashlib def filecount(): file

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

    目录 Python自动化办公之删除重复文件 思路介绍 源码解说 知识拓展 Python自动化办公之删除重复文件 思路介绍 两层判断: 1.先判断文件大小是否为相同,大小不同则不是重复文件,予以保留: 2.文件大小相同再判断文件md5,md5相同,则是重复文件,予以删除. 源码解说 from pathlib import Path import hashlib def getmd5(filename): # 接收文件路径,返回文件md5值 with open(filename, 'rb') as

  • 详解如何利用Python实现报表自动化

    目录 Excel的基本组成 一份自动化报表的流程 报表自动化实战 当日各项指标的同环比情况 当日各省份创建订单量情况 最近一段时间创建订单量趋势 将不同的结果进行合并 本篇文章将带你了解报表自动化的流程,并教你用Python实现工作中的一个报表自动化实战,篇幅较长,建议先收藏,文章具体的目录为: 1.Excel的基本组成 2.一份报表自动化的流程 3.报表自动化实战 - 当日各项指标同环比情况 - 当日各省份创建订单量情况 - 最近一段时间创建订单量趋势 4.将不同的结果进行合并 - 将不同结果

  • 详解mysql中的冗余和重复索引

    mysql允许在相同列上创建多个索引,无论是有意还是无意,mysql需要单独维护重复的索引,并且优化器在优化查询的时候也需要逐个地进行考虑,这会影响性能. 重复索引是指的在相同的列上按照相同的顺序创建的相同类型的索引,应该避免这样创建重复索引,发现以后也应该立即删除.但,在相同的列上创建不同类型的索引来满足不同的查询需求是可以的. CREATE TABLE test( ID INT NOT NULL PRIMARY KEY, A INT NOT NULL, B INT NOT NULL, UNI

  • 详解如何修改python中字典的键和值

    我们知道python中字典是无序的,它们都是通过hash去对应的.一般的如果我们需要修改字典的值,只需要直接覆盖即可,而修改字典的键,则需要使用字典自带的pop函数,示例如下: t = {} t['a'] = 1 t['b'] = 2 # 修改字典的值 print('未修改前:', t) t['b'] = 3 print('修改后: ', t) # 修改字典的键 print('-' * 30) print('未修改前:', t) t['c'] = t.pop('a') print('修改后: '

  • 详解如何创建Python元类

    什么是Python元类? Python元类是与Python的面向对象编程概念相关的高级功能之一.它确定类的行为,并进一步帮助其修改. 用Python创建的每个类都有一个基础的Metaclass.因此,在创建类时,您将间接使用元类.它隐式发生,您无需指定任何内容. 与元编程相关联的元类决定了程序对其自身进行操作的能力. 学习元类可能看起来很复杂,但是让我们先从一些类和对象的概念入手,以便于理解. Python中的类和对象 类是一个蓝图,是具有对象的逻辑实体. 一个简单的类在声明时没有分配任何内存,

  • 详解如何用Python登录豆瓣并爬取影评

    目录 一.需求背景 二.功能描述 三.技术方案 四.登录豆瓣 1.分析豆瓣登录接口 2.代码实现登录豆瓣 3.保存会话状态 4.这个Session对象是我们常说的session吗? 五.爬取影评 1.分析豆瓣影评接口 2.爬取一条影评数据 3.影评内容提取 4.批量爬取 六.分析影评 1.使用结巴分词 七.总结 上一篇我们讲过Cookie相关的知识,了解到Cookie是为了交互式web而诞生的,它主要用于以下三个方面: 会话状态管理(如用户登录状态.购物车.游戏分数或其它需要记录的信息) 个性化

  • 详解如何用Python模拟登录淘宝

    目录 一.淘宝登录流程 二.模拟登录实现 1.判断是否需要验证码 2.验证用户名密码 3.申请st码 4.使用st码登录 5.获取淘宝昵称 三.总结 1.代码结构 2.存在问题 看了下网上有很多关于模拟登录淘宝,但是基本都是使用scrapy.pyppeteer.selenium等库来模拟登录,但是目前我们还没有讲到这些库,只讲了requests库,那我们今天就来使用requests库模拟登录淘宝! 讲模拟登录淘宝之前,我们来回顾一下之前用requests库模拟登录豆瓣和新浪微博的过程:这一类模拟

  • 详解MySQL主键唯一键重复插入解决方法

    目录 解决方案: 1. IGNORE 2. REPLACE 3. ON DUPLICATE KEY UPDATE 我们插入数据的时候,有可能碰到重复数据插入的问题,但是这些数据又是不被允许有重复值: CREATE TABLE stuInfo ( id INT NOT NULL COMMENT '序号', name VARCHAR(20) NOT NULL DEFAULT '' COMMENT '姓名', age INT NOT NULL DEFAULT 0 COMMENT '年龄', PRIMA

  • 详解如何使用Python隐藏图像中的数据

    目录 编码 例子 解码 程序执行 局限性 参考 隐写术是在任何文件中隐藏秘密数据的艺术. 秘密数据可以是任何格式的数据,如文本甚至文件.简而言之,隐写术的主要目的是隐藏任何文件(通常是图像.音频或视频)中的预期信息,而不实际改变文件的外观,即文件外观看起来和以前一样. 在这篇文章中,我们将重点学习基于图像的隐写术,即在图像中隐藏秘密数据. 但在深入研究之前,让我们先看看图像由什么组成: 1.像素是图像的组成部分. 2.每个像素包含三个值:(红色.绿色.蓝色)也称为 RGB 值. 3.每个 RGB

随机推荐