首页 >>  正文

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":"cache","pub_time":1679316661000,"pure":"","rawurl":"http://zm.news.so.com/1715a84bea2900132874605fea6f9a81","redirect":0,"rptid":"71260418b6e0ce01","rss_ext":[],"s":"t","src":"什么值得买","tag":[],"title":"利用python删除群晖重复文件(缓存文件MD5方式)

康贝世3812用Python怎么统计一个列表的元素种类和各个种类的个数 -
滑要宗19461599915 ______ 统计一个列表中每一个元素的个数在python里有两种实现方式, 第一种是新建一个dict,键是列表中的元素,值是统计的个数,然后遍历list. items = ["cc","cc","ct","ct","ac"] count = {} for item in items: count[item] = count.get(item, 0...

康贝世3812python的for如何获得当前循环次数 -
滑要宗19461599915 ______ 在Python的for循环里,循环遍历可以写成: for item in list: print item 它可以遍历列表中的所有元素, 想到的替代方案是: count=0for item in list: print item count +=1 if count % 10 == 0: print 'did ten' 或: for count in range(0,len(list)): print list[...

康贝世3812python的input,float和print等 -
滑要宗19461599915 ______ 要注意你python的版本哦 python2中input可以直接输入数字,但是python3中所有输入都会被视为字符串哦 类型转换完乘以7%就可以了哦

康贝世3812for循环(python) -
滑要宗19461599915 ______ 区别很大的.... python是使用 缩进 (一般推荐使用4个空格) 来标注代码块 而非使用括号 第一段代码中 for i_record in i_list: ... for u_record in u_list: 后面2个for语句处于同样的缩进 则表示他们的执行顺序是先后顺序 而第二段代码中 2个for语句则表示嵌套循环了

康贝世3812python列表里面有字典,该怎么读取字典中的value -
滑要宗19461599915 ______ 如题,例子是Asin = [{'Asin': b2b}]展开全部 取出其中的value,使用如下代码就可以了[item[key] for item in Asin for key in item]

康贝世3812用python生成在html中显示的表格 -
滑要宗19461599915 ______ ..conn = sqlite3.connect(database='thedbfile')curr = conn.cursor()curr.execute("select * from thetable")tr1 = table1 << tr(id="header")for field in curr.description: tr1 << th(field[0])for row in curr: tr2 = table1 << tr() for item in row: tr2 << td(item)curr.close()conn.close()...以上代码基于1L"就是累w_w"的方案进行完善

康贝世3812各位大神,用python对数据库中的某列数据排序怎么搞???不是用sql来排序哦 -
滑要宗19461599915 ______ 通过例子来说明sorted的用法: 1. 对由tuple组成的List排序 Python代码 >>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10),] 用key函数排序(lambda的用法见 注释1) Python代码 >>> sorted(students, key=lambda student : student[2])...

康贝世3812python中的re可以识别<span>标签吗 -
滑要宗19461599915 ______ 方法如下: rex = r'<a.*? title="(.*?)".*?>.*?</a>' 补充一些正则表达式的知识: ## 总结 ## ^ 匹配字符串的开始. ## $ 匹配字符串的结尾. ## \b 匹配一个单词的边界. ## \d 匹配任意数字. ## \D 匹配任意非数字字符. ## x? 匹配一个可选...

康贝世3812python 列表怎么转化为字典 写了一部分了 希望能补充完整 -
滑要宗19461599915 ______ list不要做变量名.result = {}for item in list_: item = item[1:-1].split(' ') result[item[0]] = item[1]print result

康贝世3812基于python的scrapy爬虫,关于增量爬取是怎么处理的 -
滑要宗19461599915 ______ 对于只是读取某几个网站更新内容的爬虫完全没必要在python代码中实现增量的功能,直接在item中增加Url字段.item['Url'] = response.url 然后在数据端把储存url的column设置成unique.之后在python代码中捕获数据库commit时返回的异常,忽...

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