网络编程
位置:首页>> 网络编程>> Python编程>> Python实现删除重复文件的示例代码

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
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com