使用Python编写文件重复检查器

news2024/11/27 20:23:46

在日常工作中,我们经常需要处理大量文件,但有时候会遇到文件重复的情况。为了有效管理文件并避免重复占用存储空间,我们可以编写一个简单的Python程序来检查文件夹中是否存在重复文件。
C:\pythoncode\new\getmd5offile.py

介绍

本文将介绍如何使用Python和其库来编写一个文件重复检查器。我们将利用wxPython模块来构建图形用户界面,使用hashlib库生成文件的MD5哈希值,并借助sqlite3库将文件的MD5码存储在SQLite数据库中,最后找出存在重复文件的情况。

全部代码

import wx
import os
import hashlib
import sqlite3

class FileDuplicateChecker(wx.Frame):

    def __init__(self, parent, title):
        super(FileDuplicateChecker, self).__init__(parent, title=title, size=(400, 300))

        self.InitUI()
        self.Centre()
        self.Show()

    def InitUI(self):
        panel = wx.Panel(self)

        vbox = wx.BoxSizer(wx.VERTICAL)

        self.dir_picker = wx.DirPickerCtrl(panel, message="Select a folder", style=wx.DIRP_DIR_MUST_EXIST)
        self.dir_picker.Bind(wx.EVT_DIRPICKER_CHANGED, self.OnDirSelect)
        vbox.Add(self.dir_picker, flag=wx.ALL | wx.EXPAND, border=10)

        self.result_text = wx.TextCtrl(panel, style=wx.TE_MULTILINE | wx.TE_READONLY)
        vbox.Add(self.result_text, proportion=1, flag=wx.EXPAND | wx.ALL, border=10)

        panel.SetSizer(vbox)

    def OnDirSelect(self, event):
        selected_dir = self.dir_picker.GetPath()
        files_md5 = self.get_files_md5(selected_dir)
        duplicates = self.find_duplicates(files_md5)

        result = "Duplicate Files:\n"
        for file_path in duplicates:
            result += f"{file_path}\n"

        self.result_text.SetValue(result)

    def get_files_md5(self, folder):
        files_md5 = {}
        for root, _, files in os.walk(folder):
            for file in files:
                file_path = os.path.join(root, file)
                with open(file_path, "rb") as f:
                    content = f.read()
                    md5_hash = hashlib.md5(content).hexdigest()
                    if md5_hash in files_md5:
                        files_md5[md5_hash].append(file_path)
                    else:
                        files_md5[md5_hash] = [file_path]
        return files_md5

    def find_duplicates(self, files_md5):
        duplicates = []
        for md5_hash, file_paths in files_md5.items():
            if len(file_paths) > 1:
                duplicates.extend(file_paths)
        return duplicates

if __name__ == '__main__':
    app = wx.App()
    FileDuplicateChecker(None, title='File Duplicate Checker')
    app.MainLoop()

准备工作

在开始之前,请确保已经安装了以下Python库:

  • wxPython:用于构建图形用户界面
  • hashlib:用于生成文件的MD5哈希值
  • sqlite3:用于操作SQLite数据库

你可以通过pip安装这些库:

pip install wxPython hashlib sqlite3

编写代码

我们将编写一个简单的Python程序,其中包含GUI界面,文件遍历、MD5哈希生成以及重复文件查找的功能。完整的代码示例已经在前面的代码块中给出。

运行程序

运行代码后,一个GUI界面将显示出来,你可以选择一个文件夹,程序将遍历该文件夹中的所有文件,生成它们的MD5码并保存在SQLite数据库中。最后,程序将列出所有存在重复的文件。
在这里插入图片描述

结论

通过这个简单的文件重复检查器,我们可以轻松地找出文件夹中存在的重复文件,从而更好地管理和清理文件。这个程序可以帮助我们节省存储空间,避免混乱的文件管理情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1985302.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSP 2019 第三题:纪念品

CSP 2019 第三题:纪念品 题目链接 题目: 题意: 数据给出能预测的天数,纪念品种类,持有金币。每天对金币进行买卖,求买卖后的金币最大值(如何赚得更多) 知识点考: 动态规划…

从零到一:使用低代码平台搭建设备保养管理系统,提升运维效率

设备作为企业生产线上不可或缺的“动脉”,其稳定、高效的运行状态直接关乎到产品的质量与交付速度。然而,设备在长期高负荷运作下,难免会出现磨损、故障等问题,这不仅会影响生产进度,还可能带来额外的维修成本与安全风…

微信小程序--实现地图定位---获取经纬度

(1) (2) (3) html: <view class"titleTwo" style"border: none;"><view class"fontSize30 invoiceTile">企业地址</view><view class"invoiceRight" bind:tap"tapChooseAddress" data-maptype"…

Android 在布局中tools使用

效果图 布局 <TextViewandroid:id"id/tv"android:layout_width"wrap_content"android:layout_height"wrap_content"android:text"你好&#xff0c;这是TextView"android:visibility"gone"app:layout_constraintStart_to…

tornado 下载文件,显示下载速度、已下载大小、剩余时间、进度条、文件总大小

tornado 下载文件&#xff0c;显示下载速度、已下载大小、剩余时间、进度条、文件总大小 初版解决中文文件名报错显示下载速度、已下载大小下载过程中显示文件总大小、剩余时间、进度条正常前进 初版 import asyncio import osimport aiofiles import tornado.webclass FileHa…

【算法刷题日志】1044 最长重复子串和75 颜色分类,

颜色分类 这题就是双指针法&#xff0c;指到1的时候就和p1进行交换&#xff0c;然后p1指针往前移动&#xff0c;指到0的时候就和p0指针进行交换&#xff0c;p0和p1同时往前移动&#xff0c;由于可能出现连续的0后面连续的1&#xff0c;所以为了避免1被交换到末尾&#xff0c;当…

conda-pack基于同一种操作系统的环境打包教程

打包环境总结 1.激活需要复制的虚拟环境 conda env list cd /home/ww/miniconda3/envs/ conda activate webtool 2.将虚拟环境打包&#xff0c;包名&#xff1a;webtool_test.tar.gz conda pack -n webtool -o webtool_test.tar.gz 3.创建虚拟环境文件夹&#xff0c;把打包的…

Python实现深度森林(Deep Forest)分类模型(deepforest分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 随着大数据时代的到来&#xff0c;机器学习技术在各个领域的应用变得越来越广泛。在许多实际问题中&am…

HCIP学习 | 广域网、OSPF基础

Days03&#xff08;24.8.4&#xff09;广域网技术 概述 广域网技术在数据链路层面针对不同的物理链路定义了不同的封装方式。‌ 对于局域网封装&#xff0c;‌主要有Ethernet 2&#xff08;‌基于TCP/IP开发&#xff09;‌和IEEE802.3&#xff08;‌基于OSI协议开发&#xff0…

红黑树的概念和模拟实现[C++]

文章目录 红黑树的概念一、红黑树的性质红黑树原理二、红黑树的优势和比较 红黑树的模拟实现构建红黑树的数据结构定义节点的基本结构和初始化方式插入新节点插入新节点的颜色调整颜色和结构以满足红黑树性质 红黑树的应用场景 红黑树的概念 一、红黑树的性质 红黑树是一种自平…

强类型语言、弱类型语言、静态类型语言、动态类型语言

强类型和弱类型&#xff0c;并没有严格绝对的界限&#xff0c;比如C/C这种典型的强类型语言&#xff0c;实际上也允许一些隐式类型传换。

一六二、记node-sass安装失败和node切换失败问题

1. 项目install失败 2. 查询问题 在stackoverflow查询到error /node_modules/node-sass: Command failed&#xff0c;明白是node版本和node-sass版本不匹配 查询自己的node版本 应该是node版本太高的问题 3. 切换node版本 使用n切换node版本失败 原因&#xff1a;而 n 默…

2-Linux系统概述

Linux系统概述 创始人——林纳斯托瓦兹&#xff0c;Linux诞生于1991年&#xff0c;作者上大学期间实现的&#xff0c;Linux的特点&#xff1a;开源、免费、拥有最为庞大的源码贡献者&#xff1b;Linux的吉祥物是企鹅 区别开源和闭源 开源&#xff1a;开放程序源代码&#xff0…

前端(五):前端工程化

前端工程化是指在企业级的前端开发项目中&#xff0c;把前端开发所需的工具、技术、流程、经验等进行规范化、标准化。 一、环境准备 &#xff08;一&#xff09;环境准备 1、Vue-cli&#xff1a;是Vue官方提供的一个脚手架&#xff0c;用于快速生成一个Vue的项目模板。 2、…

如何利用WMS仓储管理系统进行库存整合

在当今竞争激烈的市场环境中&#xff0c;库存管理已成为企业运营的核心环节之一。为了提高库存管理的效率&#xff0c;降低库存成本&#xff0c;并实现库存资源的有效整合&#xff0c;越来越多的企业开始转向采用WMS仓储管理系统解决方案这一智能化工具。本文将从库存整合的迫切…

矩阵获客时代,云微客布局SEO优化,提升企业搜索流量

矩阵这个词大家应该都不是第一次听了&#xff0c;毕竟现在互联网时代&#xff0c;想要在线上获客&#xff0c;矩阵就绕不过去的。现在&#xff0c;短视频已经成为了当下年轻人获取信息的重要途径&#xff0c;而对于商企来说&#xff0c;布局短视频矩阵不仅是线上获客、获取流量…

内网域森林之ProxyNotShell漏洞利用

点击星标&#xff0c;即时接收最新推文 本文选自《内网安全攻防&#xff1a;红队之路》 在渗透测试过程&#xff0c;如果目标环境存在Exchange服务器&#xff0c;我们也需要测试是否存在已知的远程命令执行漏洞&#xff0c;这里首先介绍ProxyNotShell。 ProxyNotShell和之前…

60 函数参数——关键参数

关键参数主要指调用函数时的参数传递方式&#xff0c;与函数定义无关。 通过关键参数可以按参数名字传递值&#xff0c;明确指定哪个值传递给哪个参数&#xff0c;实参顺序可以和形参顺序不一致&#xff0c;但不影响参数值的传递结果&#xff0c;避免了用户需要牢记参数位置和…

战锤40K极速狂飙怎么领 战锤40K极速狂飙免费喜加一入库教程

steam喜加一。游戏名称叫做《战锤40K&#xff1a;极速狂飙&#xff08;Warhammer 40,000: Speed Freeks&#xff09;》&#xff0c;这是一款背景设定在《战锤40K》宇宙中的竞速游戏&#xff0c;玩家将驾驶装载着炸裂性武器和强大能力的车辆&#xff0c;在肾上腺素爆棚的竞速比赛…

非标自动化ARM供控制器用于绕线机控制解决方案

在现代工业生产中&#xff0c;绕线机是一种广泛应用的设备&#xff0c;用于制造各种线圈和绕组。而绕线机的控制精度和速度直接影响到产品的质量和生产效率。ARMxy 嵌入式电脑作为一种高性能的控制设备&#xff0c;为绕线机控制带来了新的标准。 ARMxy 嵌入式电脑采用了先进的嵌…