首页 >>  正文

python中items+函数

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

作者: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方式)

房何追927python写个方法,只要有一项不在就返回False -
安珍卖18381448505 ______ def contains(s, items): for item in items: if item not in s: return False return True

房何追927python 中怎么把,list,字典dict转换为字符串 -
安珍卖18381448505 ______ 字典用values()函数转化成值的列表,用items转换成(key,value)的元组列表. 列表转换成字典,需要用2个列表转化成字典,一个是key,一个是value.比如: >>>dict(zip(['a','b','c'], range(5))) {'a': 0, 'c': 2, 'b': 1} >>> a=[1,2,3] >>> ''.join( [ str(x...

房何追927python元组 列表判断 -
安珍卖18381448505 ______ items = {'a,c' : 'x' , 'e,f' : 'y' , 'h,k' : 'z'} 这是一个字典,下面的应该能满足你的要求:print [items[k] for k in items if 'e' in k] 望采纳!

房何追927Python中内置数据类型list,tuple,dict,set的区别和用法 -
安珍卖18381448505 ______ python 中list,tuple,dict,set是最常用的集合类型.list列表,相当于一个数组,不过list的长度是自动变化的而且列表元素自由的,不必每个元素都是同一种类型.它的简洁的定义方式是a=[].有序组合 tuple也是一个组合.不过tuple在定义...

房何追927Python中list,tuple,dict,set的区别和用法 -
安珍卖18381448505 ______ 查找速度快.无论是10个还是10万个,速度都是一样的,但是代价是耗费的内存大.List相反,占用内存小,但是查找速度慢.这就好比是数组和链表的区别,数组并不知道要开辟多少空间,所以往往开始就会开辟一个大空间,但是直接通过下标查找速度快;而链表占用的空间小,但是查找的时候必须顺序的遍历导致速度很慢 没有顺序.Dict是无顺序的,而List是有序的集合,所以不能用Dict来存储有序集合 Key不可变,Value可变.一旦一个键值对加入dict后,它对应的key就不能再变了,但是Value是可以变化的.

房何追927用Python怎么统计一个列表的元素种类和各个种类的个数 -
安珍卖18381448505 ______ 统计一个列表中每一个元素的个数在python里有两种实现方式, 第一种是新建一个dict,键是列表中的元素,值是统计的个数,然后遍历list. items = ["cc","cc","ct","ct","ac"] count = {} for item in items: count[item] = count.get(item, 0...

房何追927python里面字符串转换为字典,高手进,求助 -
安珍卖18381448505 ______ 如果字符串能够修改为下面这种,就可以直接json处理: import json s = '''{"id1": 1, "name1": "张三", "description1": "mmmmmm", "id2": 2, "name2": "李四", "description2": "NNNNNNN", "id3": 3, "name3": "王五", "description3": "TTTTT"}''' print json.loads(s,encoding='UTF-8')

房何追927python 从字符串中找出以$开头并以一个dict里面任意一个字符结尾的子串 -
安珍卖18381448505 ______ 将字典转成正则表达式.然后用re.search,每找一次,就将字符串的起始位置移动 d={'a':None,'b':None,'c':None,'abc':None} expl=[] for k in d: expl.append(k) expl.append(") exp=re.compile("(?:isu)\$(?:"+(("|").join(expl))+")") s= '$a=$b+$c+$abc' p=0 while p<len(s): m=exp.search(s[p:]) if not m:break print p+m.start() p+=m.end() 没有验证过,你自己试一下看成不成.

房何追927python 在一个字典里,返回值最小元素对应的键,救解 -
安珍卖18381448505 ______ 假定字典d为: d = {'a': '7', 'e': '3', 'd': '8', 'g': '7', 'f': '1', 'j': '2', 'l': '9', 'w': '4'} 那么取值最小元素对应的键值对: min(d.items(), key=lambda x: x[1]) 得到 ('f', '1') 取值最小元素对应的键,就是: min(d.items(), key=lambda x: x[1])[0] 'f'

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