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

作者:冫马讠成 时间:2022-08-14 04:33:54 

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()

效果图:

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

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

知识拓展

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

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

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()  # 删除文件

来源:https://mp.weixin.qq.com/s/7soU0wT3B4fufZ8s2Cyy5Q

标签:Python,删除,重复,文件
0
投稿

猜你喜欢

  • 复化梯形求积分实例——用Python进行数值计算

    2021-10-08 13:03:26
  • pandas数据清洗(缺失值和重复值的处理)

    2021-10-05 10:36:43
  • thinkphp5实用入门进阶知识点和各种常用功能代码汇总

    2023-05-25 02:48:34
  • 对python函数签名的方法详解

    2021-09-22 10:14:25
  • 用SQL Server事件探查器创建跟踪

    2009-02-24 17:45:00
  • Django分组聚合查询实例分享

    2023-08-07 21:44:16
  • 10个顶级Python实用库推荐

    2023-08-27 17:41:46
  • python实现输入数字的连续加减方法

    2023-04-10 09:29:22
  • js实现模拟银行卡账号输入显示效果

    2024-04-16 09:13:35
  • 如何利用Python批量处理行、列和单元格详解

    2023-02-05 05:07:35
  • pytorch查看torch.Tensor和model是否在CUDA上的实例

    2023-06-16 16:41:22
  • mysql 如何使用JSON_EXTRACT() 取json值

    2024-01-16 04:26:46
  • 在SQL Server中实现最短路径搜索的解决方法

    2024-01-24 13:47:10
  • SQL Server使用T-SQL进阶之公用表表达式(CTE)

    2024-01-17 22:42:32
  • 教你怎么用python实现字符串转日期

    2021-08-22 16:35:13
  • Python实现简易端口扫描器代码实例

    2022-08-07 16:58:24
  • ThinkPHP CURD方法之limit方法详解

    2023-11-15 03:58:00
  • vue prop属性传值与传引用示例

    2024-05-10 14:10:16
  • FrontPage2002简明教程三:网页布局

    2008-09-17 11:19:00
  • 使用cmd命令行窗口操作SqlServer的方法

    2024-01-17 06:13:13
  • asp之家 网络编程 m.aspxhome.com