详解如何使用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()
效果图:
代码说明:特别感谢瑜亮老师提供的代码!
知识拓展
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() # 删除文件
来源: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