首页 > 其他分享 >遍历文件夹和子文件夹,删除重复文件

遍历文件夹和子文件夹,删除重复文件

时间:2024-11-01 22:48:25浏览次数:4  
标签:文件 遍历 hash filepath root 文件夹 和子 os md5



import os
import hashlib
import shutil

def file_hash(filepath):
    """计算文件的MD5哈希值"""
    hash_md5 = hashlib.md5()
    with open(filepath, "rb") as f:
        for chunk in iter(lambda: f.read(4096), b""):
            hash_md5.update(chunk)
    return hash_md5.hexdigest()

def remove_duplicates(root_dir):
    """删除指定目录及其子目录中的重复文件"""
    hashes = {}
    for dirpath, dirnames, filenames in os.walk(root_dir):
        for filename in filenames:
            filepath = os.path.join(dirpath, filename)
            filehash = file_hash(filepath)
            if filehash in hashes:
                # 如果文件哈希已存在,删除这个重复文件
                print(f"Deleting duplicate file: {filepath}")
                os.remove(filepath)
            else:
                # 否则,添加文件哈希到字典
                hashes[filehash] = filepath

# 使用示例
root_directory = os.getcwd()
remove_duplicates(root_directory)

标签:文件,遍历,hash,filepath,root,文件夹,和子,os,md5
From: https://www.cnblogs.com/redufa/p/18521429

相关文章

  • 获取磁盘中各个文件夹的大小
    公司的笔记本硬盘不大,现在的开发包和软件都比较大,经常用着用着,磁盘空间就满了。所有有时候需要先分析一下,到底是哪些文件占用了空间。方法1:使用Everything软件(免费)Everything软件可以说是神器。平常经常用它来搜索文件,速度非常的快。它的文件列表是针对整个计算机的,可以默认的......
  • java字符串中得到某个字符,字符串的遍历,截取,替换
    有点详细,请耐心找您需要的看,谢谢!1得到某个字符2:字符串的遍历3:字符串的截取4:字符串的替换//以上根据实际需要输入字符常量时别忘了带""变量就直接输入;......
  • C# 如何给文件夹赋予权限,以解决权限不足问题
    专注于.NET技术开发的博主,关注我个人微信公众号查看更多:承哥技术交流小作坊。我们知道,windows操作系统系统盘的权限控制是比其它磁盘更严格的。我们应用程序如果想在C盘下进行文件读写,大部分需要管理员权限才行(像AppData,ProgramData这种目录除外)。补充说明:AppData:通常用于存......
  • P 7-1 二叉树的遍历!(简单)
    二叉树作为FDS课程最核心的数据结构之一,要求每个人都掌握!这是一道简单的二叉树问题!我们将给出一颗二叉树,请你输出它的三种遍历,分别是先序遍历,中序遍历,后序遍历!输入格式:二叉树将以这样的形式给出:第一行给出一个正整数N(N<=100),表示二叉树上的节点个数!接下来N行,每行包含三......
  • VMware虚拟机上的Ubuntu网络故障仍需要下载文件的共享文件夹解决办法
    有时候虚拟机的网络问题就像一个阴晴不定的女孩一样,昨天还畅所欲言今天却突然掉线,但是我们仍需要下载一些文件、工具或者源码用来测试,那么这个方法仅适用于这种不需要解决网络问题的特殊情况(有能力还是要去解决网络问题)首先要在计算机上下载你所需要的文件,然后复制到虚拟机上......
  • NoiLinux 虚拟机挂载主机共享文件夹
    如果你不知道这是干啥的,参考考场上的noip文件夹,可以实现快捷的内外文件互通需求VMtool如果未安装VMtool可以通过以下命令安装sudoapt-getinstallopen-vm-tools-desktopfuse联网下载的NoiLinux自带VMtool,此时会出现以下提示:open-vm-tools-desktopisalreadythe......
  • 集合操作大揭秘!遍历、增删改查一次搞懂
    在Java的集合世界里,想对集合里的数据进行操作其实很简单,只要学会了遍历、增删改查(增加、删除、修改、查询),就能轻松驾驭List、Set、Map等集合。今天我们就来用大白话把这些操作讲清楚,一次搞懂!1.遍历:逐个访问集合中的每个元素遍历就像数清楚你兜里有几颗糖,每颗糖都要摸一......
  • git 删除已经添加到git跟踪的文件或文件夹
    这里以.vs文件夹为例:要在Git已存在的项目中忽略>.vs文件夹,你需要创建或修改.gitignore文件,并添加规则来忽略.vs文件夹。如果.gitignore文件已存在,你只需要添加一行.vs/。步骤如下:1.打开终端或命令行界面。2.切换到你的Git项目目录。3.编辑.gitignore文件。如果文件不存......
  • 二叉树的三种遍历方式
    文章目录前言本文章讲解二叉树的三种遍历一、前序遍历1、理解前序遍历2、前序遍历代码二、中序遍历中序遍历代码三、后序遍历后序遍历代码总结前言本文章讲解二叉树的三种遍历前序遍历:先遍历根节点,然后是左节点,最后是右节点-----根左右中序遍历:先遍历左节点,然......
  • leetCode-深度优先遍历
    岛屿数量深度优先遍历classSolution{publicintnumIslands(char[][]grid){intxlen=grid[0].length;intylen=grid.length;intcount=0;for(intx=0;x<xlen;x++){for(inty=0;y<ylen;y++){......