Python实现删除重复文件的示例代码
作者:一青一柠 发布时间:2022-02-26 03:50:22
标签: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 True:
chunk = f.read(4096)
if not chunk:
break
h.update(chunk)
return h.hexdigest()
def remove_duplicate_files(path):
"""Remove duplicates files in the directory."""
files_hash = {}
i=0
j=0
sum=len(os.listdir(path))
for dirpath, dirnames, filenames in os.walk(path):
for filename in filenames:
j=j+1
print("执行进度为:",100*j/sum,"%")
file_path = os.path.join(dirpath, filename)
file_hash = hash_file(file_path)
if file_hash in files_hash:
os.remove(file_path)
i=i+1
# print(i)
else:
files_hash[file_hash] = file_path
print("文件总数为:",sum)
print("此处处理的重复文件数目为:",i)
在使用的时候直接调用下面那个函数即可,传入参数为目录路径。
例如下面这样:
remove_duplicate_files("Y:\图片合集")
当然,你也可以将程序打包为一个exe文件,甚至为它添加简单的页面,让非计算机专业的人也能轻易使用。
补充
当然除了上文的方法,还有很多方法可以实现,下面是小编为大家整理的内容,希望对大家有所帮助
Python删除文件夹内指定的重复文件
import os
import re
class file_clean:
def __init__(self, folder, filerege):
self.folder = folder
self.filerege = filerege
self.folder_generator = os.walk(self.folder)
# 删除所有文件夹及子文件夹下指定文件
def del_all_file(self):
for folder, subfolder, file_list in self.folder_generator:
for file in file_list:
if self.filerege == '*':
del_all_file = os.path.join(folder, file)
os.remove(del_all_file)
elif re.findall(self.filerege, file):
del_all_file = os.path.join(folder, file)
print(del_all_file)
os.remove(del_all_file)
# 只删除所有文件夹下的指定文件
def del_file(self):
for folder, subfolder, file_list in self.folder_generator:
if os.path.dirname(folder) == os.path.dirname(self.folder):
for file in file_list:
if self.filerege == '*':
del_file = os.path.join(folder, file)
os.remove(del_file)
elif re.findall(self.filerege, file):
del_file = os.path.join(folder, file)
print(del_file)
os.remove(del_file)
if __name__ == '__main__':
# 选择文件夹路径 D盘C盘目录需要使用双斜杠r'D:\\', '\.wedrive'
go = file_clean(r'D:\eong', '\.WeDrive')
# 选择要执行的函数类型del_all_file删除件夹及子文件夹下指定文件,del_file只删除当前选择文件夹的指定文件
go.del_file()
python删除本地夹里重复文件的方法
import os
import hashlib
import logging
import sys
def logger():
""" 获取logger"""
logger = logging.getLogger()
if not logger.handlers:
# 指定logger输出格式
formatter = logging.Formatter('%(asctime)s %(levelname)-8s: %(message)s')
# 文件日志
file_handler = logging.FileHandler("test.log")
file_handler.setFormatter(formatter) # 可以通过setFormatter指定输出格式
# 控制台日志
console_handler = logging.StreamHandler(sys.stdout)
console_handler.formatter = formatter # 也可以直接给formatter赋值
# 为logger添加的日志处理器
logger.addHandler(file_handler)
logger.addHandler(console_handler)
# 指定日志的最低输出级别,默认为WARN级别
logger.setLevel(logging.INFO)
return logger
def get_md5(filename):
m = hashlib.md5()
mfile = open(filename, "rb")
m.update(mfile.read())
mfile.close()
md5_value = m.hexdigest()
return md5_value
def get_urllist():
#替换指定的文件夹路径即可
base = ("F:\\pythonFile\\煎蛋网\\无聊图\\jpg\\")
list = os.listdir(base)
urlList=[]
for i in list:
url = base + i
urlList.append(url)
return urlList
if __name__ == '__main__':
log = logger()
md5List =[]
urlList =get_urllist()
for a in urlList:
md5 =get_md5(a)
if (md5 in md5List):
os.remove(a)
print("重复:%s"%a)
log.info("重复:%s"%a)
else:
md5List.append(md5)
# print(md5List)
print("一共%s张照片"%len(md5List))
来源:https://blog.csdn.net/qq_56438857/article/details/128969504
0
投稿
猜你喜欢
- 一、效果图二、必要工具Python3.7pycharm2019再然后配置它的文件,设置游戏屏幕的大小,图片路径。代码如下''
- 析构函数当某个对象成为垃圾或者当对象被显式销毁时执行。PHP5中提供的析构函数是__destruct,其与构造方法__construct相对
- 首先看一下来自Wolfram的定义 马尔可夫链是随机变量{X_t}的集合(t贯穿0,1,..
- mysql报如下错误,截取部分,message from server: "Host '****' is not
- 出现原因:缺失相应的whl文件。解决办法:下载并安装对应的whl文件。提供一个whl文件的下载网址:http://www.lfd.uci.e
- 本博文源于《python数据可视化》(黑马程序员编著)。先讲解bar参数如何使用,然后分别演示堆积柱形图和带误差柱形图画法。bar参数bar
- 本文讲述了提高代码可读性的十大注释技巧。分享给大家供大家参考,具体如下:很多程序员在写代码的时候往往都不注意代码的可读性,让别人在阅读代码时
- 用法一 SELECT `keyword_rank`.* FROM `keyword_rank` WHERE (advertiser
- 使用PyQt5应用程序制作PDF转换成图片的小工具,可以导入PDF文档后一键生成对应的PNG图片。PDF图片转换小工具使用的中间件:pyth
- ndarray.ndim:维度ndarray.shape:形状ndarray.size:元素个数ndarray.dtype:元素数据类型nd
- 问题Django 报错 [2019-09-16 16:47:27,981] - Broken pipe from ('127.0.0
- 一、必备插件🌾Chinese(中文)安装后,按快捷键Ctrl+Shift+P,输入configure languageSettings Sy
- CREATE DEFINER=`root`@`localhost` PROCEDURE `createBusiness`(parameter
- 前面的深入理解Routing章节,我们讲到了在MVC中,除了使用默认的ASP.NET 5的路由注册方式,还可以使用基于Attribute的特
- 如何用ASP输出HTML文件?<!--#include file="top.inc"--><
- 导语🎁哈喽!哈喽!我是木木子😎,今日游戏更新——超级玛丽华丽上线🎊啦!“超级玛丽”有多少人还记得这款经典游戏?对于90、00后应该不大熟悉,
- 是否也像拥有自己的机器人呢?不挨个展示了。比如说你想实现一个夸人的功能:"""作者:川川时间:2021/4/6
- 基础知识-----黄金分割法960px宽度的网格设计的好处无需我多说了,下面主要是复习一下如何作图求出960px宽度下的黄金分割点1、首先沿
- 包 packageGo 包是 Go 语言的基本组成单元,一个 Go 程序就是一组包的集合,所有 Go 代码都位于包中Go 源码可以导入其他
- 我们重要的数据是存放在MDF文件中的,如果LDF文件丢失,MDF文件没有丢失,那么数据也可以还原。如果LDF文件没有丢失,MDF文件丢失,且