python重写文件,python大文件去重
我们在下载网络资料的时候经常会乱七八糟的下载很多重复的文件,所以实现一次去重操作非常重要。本文将利用Python制作一个简单的文件移除小工具,有需要可以参考一下。
00-1010前言实施步骤补充
目录
经常在下载网络资料的时候,一堆乱七八糟的重复文件很多,所以想实现一个去重操作。
主要思想是遍历特定文件夹下的所有文件,包括其子文件夹。最后通过比较MD5函数筛选出所有文件,最终去除重复文件。
前言
中使用的第三方库比较常见,其中只有hashlib用于比较文件,并不是很常见。其他的就是一些常用的辅助操作用的第三方库。
导入os #应用文件操作
导入hashlib #文件比较操作
导入日志记录#日志记录功能操作
导入#系统应用操作
日志设置基本上是这套的范式,按照规则设置日志打印的相关信息。
Logger=logging.getLogger(系统文件重复数据删除)
logging . basic config(format= %(asctime)s %(level name)-8s :%(message)s )
logger.setLevel(日志记录。调试)
文件重复数据消除的实施逻辑代码块如下:
目录=输入(请输入要排序的文件目录: \n) #重复数据删除的文件夹路径
if os.path.isdir(目录):
Logger.info(当前目录[目录]验证成功!)
md5s=[]
对于os.walk(r 目录):中的文件路径、目录名、文件名
文件名3360中的文件名
尝试:
文件名路径=os.path.join(文件路径,文件名)
Logger.info(当前匹配路径: 文件名路径)
md5=hashlib.md5()
file=open(文件名路径, rb )
md5.update(file.read())
file.close()
md5_value=md5.hexdigest()
如果md5s:中的md5_value
os.remove(文件名路径)
logger . info([ file _ name _ path ]的副本已被删除!)
else:
md5s.append(md5_value)
例外:
logger . error([ file _ name _ path ]比较中出现异常。执行下一个!”)
else:
Logger.error(您输入的文件夹或目录不存在!)
这就是文件重复数据消除的整个实施过程。作为清理电脑文件的小工具还是挺实用的。
实现步骤
本文主要利用hashlib.md5()函数实现,下面小编重点介绍hashlib.md5()。
Python的hashlib提供了常用的总结算法,如MD5、SHA1等。
什么是总结算法?
该算法也称为哈希算法和哈希算法。通过一个函数,它将任意长度的数据转换成固定长度的数据字符串(通常用十六进制字符串表示)。例如,你写了一篇字符串为“如何使用python hash lib-作者Michael”的文章,并附上了这篇文章的摘要,如下所示
39;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文件去重内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。