花了几天时间想了想,文件拷贝是要有查重内容的。但是一个问题,文件一定要在一个目录中,还必须一个文件夹。否则MD5不同,不是一个文件只有一个MD5吗?不管了,反正我的文件都已经在一个目录中了。新建一个video_md5.py编写如下:

import hashlib
import os.pathdef get_md5(names):if os.path.isfile(names):fp = open(names, 'rb')contents = fp.read()fp.close()return hashlib.md5(contents).hexdigest()else:print('file not exists')修改主文档main.py
import os
import re
import shutil
import my_unrar as myRar
import video_md5def getfilenames(filepath):filelist_out = []for fpath, dirs, fs in os.walk(filepath):for f in fs:fi_d = os.path.join(fpath, f)if os.path.splitext(fi_d)[1] in ['.mp4', '.avi', '.MP4', '.AVI', 'ts', '.mkv']:filelist_out.append(re.sub(r'\\', '/', fi_d))else:passfilelist_out.sort()return filelist_outdef rm_detail_files(detail_dir):  # dir:去掉重文件组成新的列表ls_str = []str_dir = getfilenames(detail_dir)  # 得到dir目录中的全部文件路径try:if str_dir != []:count = 0  # 计数以便统计删除了多少重复文件video_sumdict = {}  # 全音/视频文件列表(绝对路径) 需要这样{'a1':'123','a2':'111'}for i in str_dir:nums = video_md5.get_md5(i)print("获得 %s 的MD5值" % i)video_sumdict.update({i: nums})  # video_sumdict词典中存储文件位置和文件的md5值count += 1if count > 0:print('目录中共有视频文件:%d 个' % (count))print(video_sumdict)print("下面是重复的文件----------------------------")a = video_sumdict# 字典中的key转换为列表# print(a.keys())# print('字典中的key转换为列表:', key_value)# 字典中的value转换为列表value_list = list(a.values())# print('字典中的value转换为列表:', value_list)# 去除值列表中的重复值ls_value = list(set(value_list))# print(list(set(value_list)))for va in ls_value:str = list(a.keys())[list(a.values()).index(va)]ls_str.append(str)# print("源目录和新列表比较")new_ls = list(set(str_dir).difference(set(ls_str)))# 删除新列表中的文件if new_ls != []:for n in new_ls:os.remove(n)  # 删除重复的文件print("删除了重复文件 %s" % n)else:print("没有文件,文件夹是空的!")except Exception as e:print('错误!', e)def rm_move(src, dst):  # src:源目录 dst:新目录s = getfilenames(src)d = getfilenames(dst)count = 0for i in s:count += 1i_intersection_s = list(set(i).intersection(set(d)))if i_intersection_s != []:  # 递归的去移动文件,它类似mv命令,其实就是重命名,如果有重复文件报错shutil.move(i, dst)  # 递归的去移动文件,它类似mv命令,其实就是重命名,如果有重复文件报错else:  # 否则调用shutil.copy命令,并删除源文件print("要拷贝的%s文件存在于新目录,进行覆盖。由于调用copy2程序,拷贝较慢!" % i)  # 输出错误内容shutil.copy2(i, dst)  # 拷贝文件,用它有重复文件覆盖os.remove(i)  # 删除拷贝的源文件if count > 0:print('成功从源目录%s移动到新目录%s视频文件:%d 个' % (src, dst, count))else:print("没有视频文件可以进行迁移!")def del_emp_dir(path):  # 删除迁移视频文件夹中的空目录函数,发现删除目录时如是迅雷建立的文件夹,即便为空,里面可能还存在隐藏文件,故不能删除for (root, dirs, files) in os.walk(path):for item in dirs:this_dir = os.path.join(root, item)try:os.rmdir(this_dir)  # os.rmdir() 方法用于删除指定路径的目录。仅当这文件夹是空的才可以, 否则, 抛出OSError。print(this_dir)except Exception as e:print('错误!', e)if __name__ == '__main__':src_dir = input("请输入源目录以便搜索及转移视频文件使用:")dst_dir = input("请输入新目录以便迁移视频文件使用:")if not os.path.exists(dst_dir):  # 如果没有要新建的目录则可以os.mkdir(dst_dir)  # 创建新目录myRar.chkzipdir(src_dir)  # 要搜索及移动视频文件夹中如有压缩文件都解压到data文件夹中rm_detail_files(src_dir)  # 删除源目录中的重复文件rm_move(src_dir, dst_dir)  # 搜索及移动视频文件del_emp_dir(src_dir)  # 删除搜索及移动视频文件中的空文件夹else:str_answer = input(" 文件夹已存在,您是否确定要在这个文件夹中操作,'Y'继续,'N'退出")if str_answer.lower() == 'y':myRar.chkzipdir(src_dir)  # 要搜索及移动视频文件夹中如有压缩文件都解压到data文件夹中rm_detail_files(src_dir)  # 删除源目录中的重复文件rm_move(src_dir, dst_dir)  # 搜索及移动视频文件del_emp_dir(src_dir)  # 删除搜索及移动视频文件中的空文件夹elif str_answer.lower() == 'n':print("程序终止!")else:print("您输入的有问题!")

关于压缩模块不改了,还是myunrar.py内容

import zipfile
import os
from pathlib import Path
import rarfiledef unzip_file(file_zip_path):new_zip_dir = file_zip_path.rsplit('\\', 1)[0] + '/data'if not os.path.isdir(new_zip_dir):os.makedirs(new_zip_dir)zFile = zipfile.ZipFile(file_zip_path, "r")# ZipFile.namelist(): 获取ZIP文档内所有文件的名称列表for fileM in zFile.namelist():# zFile.extract(fileM, new_zip_dir)# 解压出来单个文件extracted_path = Path(zFile.extract(fileM, new_zip_dir))# print("fileM.encode('cp437').decode('gbk')",fileM.encode('cp437').decode('gbk'))# print("extracted_path",extracted_path)# 文件重命名,将中文的文件名还原extracted_path.rename(new_zip_dir + '//' + fileM.encode('cp437').decode('gbk'))zFile.close()return new_zip_dirdef unrar_file(filename):new_zip_dir = filename.rsplit('\\', 1)[0] + '/data'if not os.path.isdir(new_zip_dir):os.makedirs(new_zip_dir)rar = rarfile.RarFile(filename, mode='r')  # mode的值只能为'r'rar.extractall(new_zip_dir)  # 解压文件rar.close()  # 关闭文件,必须有,释放内存def chkzipdir(strdir):for root, dirs, files in os.walk(strdir, topdown=False):for name in files:file_name_path = os.path.join(root, name)if os.path.isfile(file_name_path):print("准备解压", file_name_path)filename = os.path.basename(file_name_path)if filename.endswith('.zip'):unzip_file(file_name_path)elif filename.endswith('.rar'):unrar_file(file_name_path)else:print("不是压缩文件", file_name_path)else:print("不是文件", file_name_path)

就是感觉查重模块太啰嗦了,不管了,先能用先。后续再改。

文件查重删除,继续完善及修改上篇内容相关推荐

  1. Java实现文件查重去重

    Java实现文件查重去重 前言 大概流程 代码 前言 网上下的一些去重软件不是太慢就是去的不够干净,故用Java编写一个使用 大概流程 ① 遍历选定的文件并按照文件长度分组 ② 根据md5二次过滤分组 ...

  2. 文件查重程序 v1.5.4 官网

    Welcome to my blog! <script language="javascript" src="http://avss.b15.cnwg.cn/cou ...

  3. 学习项目---文件查重

    声明:本项目在deepin系统下vim编译的,利用了jieba分词工具,如果在vs编译的话需要设置文件路径,还需要把GDK转成UTF8,在读的时候用UTF8转成GDK 1.文件查重原理: 1.1中文分 ...

  4. Unity编辑器小工具——文件查重(MD5)

    Unity编辑器小工具--文件查重(MD5) 算法思想: 在Unity中,每一个不同资源.文件所生成MD5码是不同的,但是相同文件,路径不同.文件名不同的同一类文件的MD5码是相同的,所以可以通过生成 ...

  5. centos7 应用笔记: fslint 文件查重

    centos7 应用笔记: fslint 文件查重 fslint 可以用于文件的查重. fslint 扫描的是文件的内容.如果内容一致,则会认为文件一致.而不论文件名是否一致. 安装 fslint # ...

  6. python文件查重_文件查重 我使用的是面向局部敏感的最小哈希签名的方法进行文档查重 联合开发网 - pudn.com...

    文件查重 所属分类:其他 开发工具:Python 文件大小:39KB 下载次数:7 上传日期:2017-12-20 16:45:32 上 传 者:lala_ 说明:  我使用的是面向局部敏感的最小哈希 ...

  7. 文件批量重命名工具,批量修改文件名的实现思路

    在工作中可能会遇到文件数据成果已经制作完成后,遇到文件命名规则变更,需要对大量文件重命名,甚至修改目录结构的.本文介绍利用FME实现文件批量重命名的解决方法. 因为工作实际情况各不相同,文件重命名规则 ...

  8. 用java设计一个文件查重程序,输入两个文本文件,输出两个文本文件的重复率(最长公共子序列的应用)...

    你可以使用java代码来设计一个文件查重程序.首先,你需要读取两个文本文件的内容,将它们存储在字符串变量中.然后,你可以使用最长公共子序列(LCS)算法来计算两个字符串的重复率. LCS算法的实现方法 ...

  9. 我的Windows工具之文件查重工具——DuplicateCleaner

    目录 背景 优势 劣势 致歉 流程截图 下载地址 背景 系统又有重复文件,电脑管家,360等软件能简单检测但是总是不尽如人意,特别是我这种在多个网站爬图而且有很高重复率的情况下,更需要一个可靠的查重软 ...

最新文章

  1. 1049 Counting Ones
  2. vs2008格式化代码
  3. 快收藏!52篇25万字,微服务、云原生、容器、K8S、Serverless精华文章集锦
  4. 我的Go+语言初体验--Go+之环境安装与程序编码初体验
  5. Django搜索工具——全文检索
  6. strchr函数的用法
  7. 【Nginx那些事】nginx原理解析
  8. 学以致用三十四-----python2.0加载图片
  9. 浏览器展示CSS伪类的动画和过渡效果应用
  10. python访问组策略_python 组策略
  11. 【利用存储过程和三层架构完成新闻发布】
  12. zabbix详解(十三)——zabbix微信报警实战
  13. ios打包时候提示三方文件库错误,整理下解决的思路
  14. Newtonsoft.Json.JsonConvert.DeserializeObject首次转换太慢问题
  15. 基于MTK方案AG3335芯片设计的款超小型超低功耗定位器
  16. 软件测试培训费多少钱?贵吗?靠谱吗?
  17. java中将字符串转换为URL能解析的编码
  18. R语言ggplot2绘图
  19. 计算机术语仿真,计算机仿真-精.ppt
  20. 解决win10中无法打开CHM文件的方法

热门文章

  1. No7.基本数据类型的包装类
  2. 深度学习基础:一致性的评价方法(皮尔森相关系数法、Cohen‘s Kappa相关系数)
  3. public与protect与private的详解
  4. Ubuntu 14.04安装Nvidia显卡驱动以及查看显卡驱动
  5. ubuntu20.04安装opencv4.7
  6. 最小相位滤波器 matlab,基于MATLAB最小相位数字滤波器的设计方法研究
  7. Python--Opencv:errorFindContours supports only CV_8UC1 images when mode = CV_RETR_FLOODFILL otherw
  8. 基于Android的租车app
  9. matlab marker太多,关于plot中的markersize问题
  10. Synplify 综合Gtech 网表