首页 >>  正文

怎么用python存储文件

来源: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":"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方式)

空背刮4396python 怎么保存中间的某一行一直到文本结束或是删除操作过的行 -
韩峡连17793635374 ______ f=open("111.txt") list=f.readlines() f.close() aaa=int(linecache.getline('222.txt',1)) aaa=aaa.replace("\n","").replace("\r","") for i in range(0,len(list)): n=list[i] n=n.replace("\n","").replace("\r","") #xx=w(i) 这里突然出现xx和w()...

空背刮4396python怎么中文写txt文件 -
韩峡连17793635374 ______ 本文以txt 文本为例,只是介绍ANSI,Unicode,UTF-8 三种编码的文件的读写过程,对于编码不做深究了 一、用记事本另存为时,可以选择保存文本使用的的几种编码模式,分别为:ANSI:默认保存的编码格式,采用本地操作系统默认的内码,简...

空背刮4396python 有办法将文件放到内存中么 -
韩峡连17793635374 ______ #把1.txt文件读取在内存中,依次按行输出文件中内容 with open('1.txt','r') as f: for i in f: print i

空背刮4396如何用python dict存储大量数据 -
韩峡连17793635374 ______ 我们以往的经验,生成对比信息的字典代码如下:def getCurrentCompareMessageDict0(dict0, dict1):'''未被优化的获取当前对比信息字典''' dlist0=list(dict0.keys()) dlist1=list(dict1.keys()) dict2={} for i in range(len(dlist1)):if dlist1[i] not in dlist0:key=...

空背刮4396python怎样把爬到的数据保存到 text文件中 -
韩峡连17793635374 ______ 你那个函数 WriteToTxt就是把数据保存到文本文件的,如果你不放心的话,调用的时候把文件扩展名修改成.txt

空背刮4396Python (command line) 如何保存.PY文件? -
韩峡连17793635374 ______ 在Windows下编程Python很方便,用你熟悉喜欢的任何一款文本编辑器编写代码,保存后在命令行中键入python.exe yourscript.py.另外,据说"ipython"是非常方便的交互式命令行环境.

空背刮4396麻烦问一下,Python怎么保存啊.. -
韩峡连17793635374 ______ 这是Python交互界面,没法保存的,你可以写在一个.py文件中,然后再调用Python执行 学习Python,推荐在Linux系统中练习而不是Windows中(PS:纯属个人意见)

空背刮4396怎么用python在”另存为“窗口中输入文件名,有谁帮忙解决一下,万分感谢! -
韩峡连17793635374 ______ 如果输入不了中文.你可以用记事本输入 ,再粘贴.不过在python里,要记着以下几点:1.目录名不要有空格2.目录名及文件名不要是中文3.文件名不要以数字开头 你可以无视上面的规则.不过老版本的python的确需要这样.

空背刮4396我把PY文件保存在Mac 上文档的一个文件夹“python”里了,如何在终端里运行那个文件? -
韩峡连17793635374 ______ 打开终端,先输入python ,然后在finder中找到那个文件,拖到终端,就可以了:

空背刮4396如何利用 Python 读取数据科学中常见几种文件 -
韩峡连17793635374 ______ 文件格式是在文件中存储信息的一种标准方法. 首先,文件格式指定文件是一个二进制或ASCII文件.其次,文件展示了文件的组织形式.例如,逗号分隔值(CSV)文件格式存储在纯文本的表格数据.

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