首页 >>  正文

python+encode+decode

来源:baiyundou.net   日期:2024-09-21

作者:siseniao

从该文章改进:https://post.smzdm.com/p/an370emp/?zdm_ss=Android_1106136211_&send_by=1106136211&from=other&invite_code=zdmwffzv7winv

原文每次扫描都需要重新计算MD5,对于大文件来说,磁盘消耗较大,增加了缓存文件存储md5,每次扫描只计算新文件,提高效率。

不废话,直接贴代码:

import os

import hashlib

# 只删除以下列表中的重复文件类型.如果想删除其他类型的文件,自己添加一下就行了

file_type = ['.jpg', '.jpeg', '.png', '.gif', '.psd', '.bmp', '.webp', '.mp4', '.mkv', '.avi', '.mov', 'mpeg', 'mpg',
            '.rar', '.zip']
check_files = []

#自行修改目录列表
work_dir_list = [r'/volume2/111', r'/volume1/222']


def save_md5_file(files_dict:dict):
   if files_dict is None:
       return
   try:
       with open("md5.txt", "w") as f:
           for path_md5, file_md5, in files_dict.items():
               f.write(str(path_md5) + "=" + str(path_md5) + 'n')

   except Exception as e:
       pass


def open_md5_file():
   files_md5 = {}
   try:
       with open("md5.txt", "r") as f:
           for md5_line in iter(lambda: f.readline(), ""):
               list_keys = md5_line.split('=')
               if len(list_keys) == 2:
                   files_md5[list_keys[0].strip()] = list_keys[1].strip()
   except Exception as e:
       pass

   return files_md5


def remove_repeat_files():
   for work_dir in work_dir_list:
       for root, dirs, files in os.walk(work_dir):
           for name in files:
               p_type = os.path.splitext(os.path.join(root, name))[1]
               if p_type in file_type:
                   check_files.append(os.path.join(root, name))
           for name in dirs:
               p_type = os.path.splitext(os.path.join(root, name))[1]
               if p_type in file_type:
                   check_files.append(os.path.join(root, name))
   files_dict = {}
   files_md5 = open_md5_file()
   r_index = 0
   print('Files Num:%s' % len(check_files))

   for file_path in check_files:
       try:
           md5_path = hashlib.md5()
           md5_path.update(file_path.encode('utf-8'))
           path_md5 = md5_path.hexdigest()
           file_md5 = files_md5.get(path_md5)
           if file_md5 is None:
               md5_hash = hashlib.md5()
               with open(file_path, "rb+") as f:
                   for byte_block in iter(lambda: f.read(4096), b""):
                       md5_hash.update(byte_block)
                   file_md5 = md5_hash.hexdigest()
               print('Check file MD5:%s' % file_path)
               files_md5[path_md5] = file_md5

           if files_dict.get(file_md5) is None:
               files_dict[file_md5] = file_path
           else:
               d_path = files_dict[file_md5]
               d_path_stats = os.stat(d_path)
               file_stats = os.stat(file_path)
               d_time = d_path_stats.st_ctime
               f_time = file_stats.st_ctime
               if d_time > f_time:
                   os.remove(d_path)
                   files_dict[file_md5] = file_path
                   print('Delete File:', d_path)
                   r_index += 1
               else:
                   os.remove(file_path)
                   print('Delete File:', file_path)
                   r_index += 1
       except Exception as e:
           pass

   print('File Count:%s, Repeat Files Num:%s. All deleted!' %( len(check_files),str(r_index)))
   save_md5_file(files_md5)


if __name__ == '__main__':
   remove_repeat_files()
   


可以在ssh或者任务计划里执行

","gnid":"9a931522e9730c14b","img_data":[{"flag":2,"img":[{"desc":"","height":"385","title":"","url":"https://p0.ssl.img.360kuai.com/t01a2508b2adc68479c.jpg","width":"600"}]}],"original":0,"pat":"art_src_1,fts0,sts0","powerby":"hbase","pub_time":1679316661000,"pure":"","rawurl":"http://zm.news.so.com/1715a84bea2900132874605fea6f9a81","redirect":0,"rptid":"71260418b6e0ce01","rss_ext":[],"s":"t","src":"什么值得买","tag":[],"title":"利用python删除群晖重复文件(缓存文件MD5方式)

仰养静1842Windows下怎么搭建Python+Selenium的自动化环境 -
林贫脉18688866344 ______ 第一步:网上下载Python2.7版本,默认运行安装即可;(install 安装) 第二步:安装完成之后,配置Python环境变量C:\Python27(操作步骤:电脑->属性->高级->环境变量->系统变量中的PATH为:变量值:;C:\Python27 ) 第三步:在python...

仰养静1842python正则表达式函数match和search的区别详解 -
林贫脉18688866344 ______ match()和search()都是python中的正则匹配函数,那这两个函数有何区别呢?match()函数只检测RE是不是在string的开始位置匹配, search()会扫描整个string查找匹配, 也就是说match()只有在0位置匹配成功的话才有返回,如果...

仰养静1842python+MySQL: 从多个表中查询数据 -
林贫脉18688866344 ______ int array[]; int i=0; MergeSort mergeSort = new MergeSort(); array = mergeSort.generateRandArray(10000); mergeSort.sort(array); while(i

仰养静1842python中+加号什么意思– 智联问道 -
林贫脉18688866344 ______ name=;;while not name:name=raw_input(u;请输入姓名:;) print name python中的not具体表示是什么:在python中not是逻辑判断词,用于布尔型True和False,not True为False,not False为True,以下是几个常用的not的用法:(1) not与逻辑...

仰养静1842用Python写过哪些脑洞大开的小工具 -
林贫脉18688866344 ______ #!/usr/bin/env python2.7 # --*-- encoding: utf-8 --*-- # enable print(,end='') #from __future__ import print_function import argparse import sys import os import re import bs4 import urlparse import requests def download(url, out, title): #out = url.split('/'...

仰养静1842python 16进制转字符串 -
林贫脉18688866344 ______ #将16进制字符转成二进制字符def str2byte(s): base='0123456789ABCDEF' i=0 s = s.upper() s1='' while i < len(s): c1=s[i] c2=s[i+1] ...

仰养静1842python3 file open默认以什么方式打开+csdn -
林贫脉18688866344 ______ python:open/文件操作 open/文件操作 f=open('/tmp/hello','w')#open(路径+文件名,读写模式)#读写模式:r只读,r+读写,w新建(会覆盖原有文件),a追加,b二进制文件.常用模式 如:'rb','wb','r+b'等等 读写模式的类型有:rU 或 Ua 以读方式...

仰养静1842以下Anaconda中Python环境管理命令错误的是? -
林贫脉18688866344 ______ d是错误的那个-name应该是—name才对.

仰养静1842python大作业的详细描述 -
林贫脉18688866344 ______ 123456789101112131415161718192021222324252627282930313233343536 # encoding=UTF-8 ==>定义Python代码的编码为UTF-8# 石头剪子布 程序# 李忠 importrandom ==>导入随机生成器# 定义石头剪子布字典 dict={1:'剪子',2:'石头'...

仰养静1842如何用python和web.py搭建一个网站 -
林贫脉18688866344 ______ 1. 环境搭建. 环境搭建比较繁琐,记得当时也是满世界找资料,所以我直接打包好了所有的文件(apache(已经放进去python-wscgi) + web.py+apache所需要的vs2010运行库+python+网站文件),直接解压放上去就能用.有需要同学让我传...

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024