python-os模块和hashlib模块

1 篇文章 0 订阅

获取目前所在目录:

import os
os.getcwd()

返回给定目录及其子目录的所有文件名:

def walk(dirname):
	for name in os.listdir(dirname):
		path = os.path.join(dirname,name)
		
		if os.path.isfile(path): #判断该路径是否为一个正常的文件
			print(path)
		else: #如果该路径不是文件,则继续递归
			walk(path)

查找重复文件:

思路:可以利用md5算法,计算出每个文件的密文,再进行比较;因为如果两个文件的md5加密结果一致,那他们很有可能就是重复文件、文件内容相同。

import hashlib
import os

dic = dict()
def duplicate(dirname):
	for name in os.listdir(dirname):
		path = os.path.join(dirname,name)

		if os.path.isfile(path):
			if os.path.splitext(path)[1] == '.txt': #判断是否为txt格式的文件
				text = open(path,'rb')
				hl = halishlib.md5() #md5加密
				hl.update(text.read())
				hash_code = hl.hexdigest() #转为十六进制
				text.close()
				md5 = str(hash_code).lower() #统一转为小写字母,方便之后的比较
				if len(md5) != 0: #如果md5不为空,则加到字典中,key为路径,value为md5密文
					dic[path] = md5
		else:
			duplicate(path)
#调用duplicate函数
duplicate('/Users/lyuhuanyi/Desktop')

val = dict() # 创建新字典

for key,value in dic.items(): #遍历所有txt格式的文件
	if value not in val: #判断该md5密文是否在val中存在
			val[value] = [key] # val字典:key为md5密文,value为路径,而且是list类型
	else:
		val[value].append(key) 

if i,j in val.items():
	if len(j) > 1: #判断val字典中,是否有value的长度大于1,大于1代表有重复的md5
		print(j)
				
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值