广告
返回顶部
首页 > 资讯 > 后端开发 > Python >基于Python制作一个文件去重小工具
  • 492
分享到

基于Python制作一个文件去重小工具

2024-04-02 19:04:59 492人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录前言实现步骤补充前言 常常在下载网络素材时有很多的重复文件乱七八糟的,于是想实现一个去重的操作。 主要实现思路就是遍历出某个文件夹包括其子文件夹下面的所有文件,最后,将所有文件

前言

常常在下载网络素材时有很多的重复文件乱七八糟的,于是想实现一个去重的操作。

file

主要实现思路就是遍历出某个文件夹包括其子文件夹下面的所有文件,最后,将所有文件通过MD5函数的对比筛选出来,最后将重复的文件移除。

file

实现步骤

用到的第三方库都比较的常见,其中只有hashlib是用来对比文件的不是很常见。其他的都是一些比较常见的第三方库用来做辅助操作。

import os  # 应用文件操作
import hashlib  # 文件对比操作
import logging  # 日志函数操作
import sys  # 系统应用操作

日志的设置基本都是这一套的范式,按照规则设置好日志打印的相关信息。

logger = logging.getLogger('系统文件去重')
logging.basicConfig(fORMat='%(asctime)s %(levelname)-8s: %(message)s')
logger.setLevel(logging.DEBUG)

文件去重的实现逻辑代码块如下:

diretory = input('请输入需要整理的文件目录: \n')  # 去重的文件夹路径

if os.path.isdir(diretory):
    logger.info('当前目录[' + diretory + ']校验成功!')
    md5s = []
    for file_path, dir_names, file_names in os.walk(r'' + diretory):
        for file_name in file_names:
            try:
                file_name_path = os.path.join(file_path, file_name)
                logger.info('当前比对路径: '+ file_name_path)
                md5 = hashlib.md5()
                file = open(file_name_path, "rb")
                md5.update(file.read())
                file.close()
                md5_value = md5.hexdigest()
                if md5_value in md5s:
                    os.remove(file_name_path)
                    logger.info('[' + file_name_path + ']出现重复已经移除!')
                else:
                    md5s.append(md5_value)
            except:
                logger.error('[' + file_name_path + ']对比发生异常,执行下一个!')

else:
    logger.error('输入的文件夹或者目录不存在!')

以上就是文件去重的整个实现过程,用来做一个清理电脑文件的小工具还是比较实用的。

补充

本文中主要是利用hashlib.md5()函数实现的,下面小编为大家重点介绍一下hashlib.md5()

python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。

什么是摘要算法呢?

摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。 举个例子,你写了一篇文章,内容是一个字符串'how to use Python hashlib - by Michael',并附上这篇文章的摘要是'2d73D4f15c0db7f5ecb321b6a65e5d6d'。如果有人篡改了你的文章,并发表为'how to use python hashlib - by Bob',你可以一下子指出Bob篡改了你的文章,因为根据'how to use python hashlib - by Bob'计算出的摘要不同于原始文章的摘要。

可见,摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过。

摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。

当然,hashlib.md5()除了可以用来给文件去重,还能做到密码加密,下面是示例代码

#!/usr/bin/env python
#-*- coding:utf-8 -*-
"""
功能:
    登录验证模块
详细说明:
    1.密码文件为passwd
    2.passwd未创建或丢失,会提示:密码文件不存在,建议重新注册!!
    3.未注册用户登录会提示:用户名不存在,请您先进行注册!
    4.已注册用户登录时,忘记密码,尝试3次后密码还不正确则退出验证,等一会儿则可以重新登录
    5.作为装饰器进行登录验证
"""
import JSON
import hashlib
import os
pwd = os.getcwd()
fileName = os.path.join(pwd,"passwd")

#将明文密码通过md5进行加密,返回一个加密后的md5的值
def calc_md5(passwd):
    md5 = hashlib.md5("haliluya")
    md5.update(passwd)
    ret = md5.hexdigest()
    return ret


#新用户注册模块
def reGISter():
    #判断密码文件passwd是否存在,存在则载入列表,不存在就重新创建一个空字典
    if os.path.exists(fileName):
        #载入用户列表,数据结构为字典,k=userName,v=passwdMd5
        with open("passwd", "r+") as loadsFn:
            userDB = json.loads(loadsFn.read())
    else:
        userDB = {}
    #让用户输入用户名
    userName = raw_input("姓名:")
    #标志位:控制循环跳出
    flag = True
    while flag:
        #用户注册时,需输入两次密码
        passwd1 = raw_input("密码:")
        passwd2 = raw_input("确认密码:")
        #如果两次密码不一致,则不执行下一步,再次输入密码并进行确认
        if not passwd1 == passwd2:
            continue
        else:
            #两次输入密码一致,标志位置为False,下次跳出循环
            flag = False
        #调用calc_md5函数将明文密码转为对应的md5值,用于保存
        passwdMd5 = calc_md5(passwd1)
    #将用户名与密码对应存入字典userDB中
    userDB[userName] = passwdMd5
    #将用户名和密码存入文件
    with open(fileName, "w") as dumpFn:
        dumpFn.write(json.dumps(userDB))


#用户登录验证,装饰器
def login(func):
    def decorater(*args,**kwargs):
        #判断passwd文件是否存在,存在则载入userDB(用户:密码),否则就重新注册新的passwd文件并返回
        if os.path.exists(fileName):
            with open("passwd", "r+") as loadsFn:
                userDB = json.loads(loadsFn.read())
        else:
            print "密码文件不存在,建议重新注册!!"
            register()
            return

        name = raw_input("用户名:")
        #用户名是否存在,存在就继续输入密码,不存在则进行注册
        if name in userDB.keys():
            flag = True
            counter = 0
            #循环输入密码,密码正确,flag=False(下次直接跳出循环)并执行函数,密码错误则允许尝试3次,超过3次验证失败,退出验证
            while flag:
                passwd = raw_input("密码:")
                passwdMd5 = calc_md5(passwd)
                if passwdMd5 == userDB[name]:
                    flag = False
                    func(*args,**kwargs)
                elif counter > 2:
                    print "您已经尝试了3次,请过会儿再试!!"
                    return
                else:
                    counter += 1
        else:
            print "用户名不存在,请您先进行注册!"
            register()
    return decorater

if __name__ == "__main__":
    @login
    def hello():
        print "Hello world!"
    hello()

到此这篇关于基于Python制作一个文件去重小工具的文章就介绍到这了,更多相关Python文件去重内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 基于Python制作一个文件去重小工具

本文链接: https://www.lsjlt.com/news/139756.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于Python制作一个文件去重小工具
    目录前言实现步骤补充前言 常常在下载网络素材时有很多的重复文件乱七八糟的,于是想实现一个去重的操作。 主要实现思路就是遍历出某个文件夹包括其子文件夹下面的所有文件,最后,将所有文件...
    99+
    2022-11-13
  • 怎么用Python制作一个文件去重小工具
    这篇文章主要讲解了“怎么用Python制作一个文件去重小工具”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python制作一个文件去重小工具”吧!前言常常在下载网络素材时有很多的重复文...
    99+
    2023-06-29
  • 基于PyQt5制作Excel文件数据去重小工具
    需求说明:将单个或者多个Excel文件数据进行去重操作,去重的列可以通过自定义制定。 开始源码说明之前,先说明一下工具的使用过程。 1、准备需要去重的数据文件。 2、使用工具执行...
    99+
    2022-11-13
  • 基于Python自制一个文件解压缩小工具
    经常在办公的过程中会遇到各种各样的压缩文件处理,但是呢每个压缩软件支持的格式又是不同的。 没有可以一种可以同时多种格式的并且免费的文件解压缩工具,于是我使用python的PyQt5开...
    99+
    2023-02-06
    Python文件解压缩工具 Python文件解压缩
  • 基于Python制作一个文件解压缩工具
    经常由于各种压缩格式的不一样用到文件的解压缩时就需要下载不同的解压缩工具去处理不同的文件,以至于桌面上的压缩工具就有三四种,于是使用python做了一个包含各种常见格式的文件解压缩的...
    99+
    2022-11-11
  • 基于QT制作一个简易的传输文件小工具
    最近因为一个事情很恼火,因为办公需要用到企业微信,但是企业微信只能在一个电脑上登陆,所以当别人发文件给你的时候,你只能一个电脑接收,创建共享文件夹也很麻烦,每次都需要去访问,很麻烦。...
    99+
    2022-11-12
  • 基于Python怎么制作一个文件解压缩工具
    经常由于各种压缩格式的不一样用到文件的解压缩时就需要下载不同的解压缩工具去处理不同的文件,以至于桌面上的压缩工具就有三四种,于是使用python做了一个包含各种常见格式的文件解压缩的小工具。常见的压缩格式主要是下面的四种格式:zip 格式的...
    99+
    2023-05-14
    Python
  • 基于Python实现视频去重小工具
    同级目录下新建dup_video import json import os import shutil import cv2 import imagehash from PIL ...
    99+
    2023-03-24
    Python实现视频去重工具 Python视频去重 Python视频
  • 基于Python制作一个多进制转换工具
    目录前言主要步骤完整代码前言 学习资料下载链接 提取码:9d4g  进制转换计算工具含源文件 主要步骤 导入模块 import tkinter from tki...
    99+
    2022-11-13
  • 基于PyQt5制作一个群发邮件工具
    演示示例使用QQ邮箱发送邮件,先获取自己的QQ邮箱的授权码。因为后面发送邮件时需要使用自己的授权码作为邮箱的密码登录邮箱最后达到发送邮件的目的。 将UI处理的相关的界面包导入进来...
    99+
    2022-11-10
  • 基于Python制作一个简单的文章搜索工具
    目录 前言功能实现导入模块创建窗口背景图片搜索文本框 内容显示界面搜索内容效果代码展示内容效果代码点击搜索功能代码访问博客网页 前言 今天,我无聊的时候...
    99+
    2023-05-12
    Python实现文章搜索工具 Python文章搜索工具 Python文章搜索 Python 搜索工具
  • 基于Python如何实现视频去重小工具
    这篇文章主要介绍“基于Python如何实现视频去重小工具”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于Python如何实现视频去重小工具”文章能帮助大家解决问题。同级目录下新建dup_video...
    99+
    2023-07-05
  • 基于Python制作个抢红包的工具
    目录1. 概述2. 环境3. 实现1. 概述 快过年了,刚刚收到了两个消息,一个好消息,一个坏消息。 先说好消息,好消息就是微信群里有人要发红包,开心~ 不过转念一想,前几次的红包一...
    99+
    2023-01-10
    Python抢红包工具 Python抢红包 Python 红包
  • 基于PyQT5制作一个桌面摸鱼工具
    目录前言按键功能控制主要功能核心代码前言 现在我能一整天都严肃地盯着屏幕,看起来就像在很认真地工作, 利用摸鱼,打开小说,可实行完美摸鱼,实时保存进度 用PYQT5 Mock一个摸鱼...
    99+
    2022-11-13
  • 基于PyQt5制作一个截图翻译工具
    目录功能介绍UI 界面截图翻译文字识别全局热键(快捷键)托盘管理主代码功能介绍 1.翻译功能 2.截图功能(快捷键 + 截图存储到剪切板中) 3.文字识别OCR(基于百度API的文字...
    99+
    2022-11-12
  • 一文详解如何用GPU来运行Python代码/基于Python自制一个文件解压缩小工具
    前几天捣鼓了一下Ubuntu,正是想用一下我旧电脑上的N卡,可以用GPU来跑代码,体验一下多核的快乐,感兴趣的小伙伴快跟随小编一起了解一下吧 简介 前几天捣鼓了一下Ubuntu,正是想用一下我旧电脑上的N卡,可以用GPU来跑代码,体验一下...
    99+
    2023-10-02
    python 数学建模 开发语言 程序人生 职场和发展
  • 基于Python3制作一个带GUI界面的小说爬虫工具
    目录效果图开发完成后的界面采集过程界面采集后存储主要功能用到的第三方模块打包为 exe 命令全部源码效果图 最近帮朋友写个简单爬虫,顺便整理了下,搞成了一个带GUI界面的小说爬虫工具...
    99+
    2022-11-13
  • 基于PyQT5制作一个敏感词检测工具
    设计思路:根据敏感词库文件筛选,查看输入的文本中是否包含敏感词汇。从而过滤出相关的敏感词。 导入应用相关的模块。 import os import logging import s...
    99+
    2022-11-13
  • 基于Python制作一键桌面整理工具
    目录前言效果展示开发思路完整代码前言 我承认我不是一个爱整理桌面的人,因为我觉得乱糟糟的桌面,反而容易找到文件。 哈哈,可是最近桌面实在是太乱了,自己都看不下去了,几乎占满了整个屏幕...
    99+
    2022-11-13
  • 基于Python制作B站视频下载小工具
    目录1. 原理简介2. 网页分析3. 视频爬取4. 存入本地5. GUI工具制作1. 原理简介 原理很简单,就是获取视频资源的源地址,然后爬取视频的二进制内容,再写入到本地即可。 2...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作