python之读取文件的MD5码并重命名文件

摘要:
由于自己的手机经常备份,备份后原来的图片视频没有删除,下次再备份的时候移动硬盘上又多了很多重复图片,于是想着能不能用提取MD5校验码的方式识别出重复的文件,然后处理下硬盘里已经重复的内容.考虑到最近在学python,于是通过上网查资料和内容,借很多大牛的轮子来试了一下,搞了两个晚上,终于算是阶段性完成,能达到目标的方法.主要难点有三个:获取文件的MD5码;不能更改文件的后缀名(例如原来是jpg的保

由于自己的手机经常备份,备份后原来的图片视频没有删除,下次再备份的时候移动硬盘上又多了很多重复图片,于是想着能不能用提取MD5校验码的方式识别出重复的文件,然后处理下硬盘里已经重复的内容.

考虑到最近在学python,于是通过上网查资料和内容,借很多大牛的轮子来试了一下,搞了两个晚上,终于算是阶段性完成,能达到目标的方法.主要难点有三个:

  1. 获取文件的MD5码;
  2. 不能更改文件的后缀名(例如原来是jpg的保留jpg,MP4的保留MP4);
  3. 遍历目标文件夹内所有文件;

不多说了,上代码,各位如有适合请拿去不谢.如有帮助,请记得留言,谢谢.

1 #!/usr/bin/env python37
2 #-*- coding: utf-8 -*-
3 #@File  : renamefile.py
4 #@Author: Frank
5 #@Date  : 2018-09-22
6 
7 importhashlib
8 importos
9 importtime
10 
11 #1.获取文件MD5值
12 defget_md5(file_name,path):
13     with open(os.path.join(path,file_name),'rb') as f:
14         md5obj =hashlib.md5()
15 md5obj.update(f.read())
16         hash =md5obj.hexdigest()
17     #print(hash,type(hash))
18     returnhash
19 
20 #2.找出当前的文件的后缀名
21 deffile_type(file):
22     filename = file.split('.')[0]
23     filetype = file.split('.')[-1]
24     #print(filename,filetype)
25     returnfiletype
26 
27 
28 #3.主函数:查找目标目录下的所有文件,并使用MD5值及后缀名重命名当前文件
29 defmain(path):
30     winerror =[]
31     for root,dirlist,filelist inos.walk(path):
32         for file infilelist:
33             newname =  '{0}.{1}'.format(get_md5(file,path), file_type(file))
34             print(newname)
35             try:
36                 if os.path.join(path,newname) ==os.path.join(path,file):
37                     pass
38                 else:
39                     print('Now Renaming:', file, 'To', newname)
40 os.rename(os.path.join(path,file),os.path.join(path,newname))
41             exceptWindowsError:
42                 nickname = '{0}.{1}'.format(str(len(winerror)),file_type(file))
43                 print('WindowsError for:',file, 'Renaming to:', nickname)
44 winerror.append(file)
45 os.rename(os.path.join(path,file),os.path.join(path,nickname))
46     print(winerror)
47     print(len(winerror))
48 
49 
50 
51 #4.执行
52 path = r'D:iPhoneshowdup
ameduplicate'
53 if __name__ == '__main__':
54     starttime =time.time()
55 main(path)
56     endtime =time.time()
57     usetime = endtime -starttime
58     print('总计用时:', usetime, 's')

免责声明:文章转载自《python之读取文件的MD5码并重命名文件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Jmeter(一)ecshop绕过验证码暴力破解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

在Ubuntu中创建一个简单的DJango项目

一:创建及运行虚拟环境 步骤说明 1. 使用命令行在Ubuntu系统下创建一个虚拟环境如创建一个叫py3的虚拟环境 irtualenv py3 2.进入创建好的虚拟环境 workon py3 3.在虚拟环境中安装Django, 代码说明 mkvirtualenv 创建虚拟环境 rmvirtualenv 删除虚拟环境 virtual 虚拟机...

Python数据挖掘-词云美化

1、语料库构建 由于不像之前是对很多个文件进行词频统计,所以不需要使用os.walk()方法遍历每一个文件; 只需使用codecs.open()打开相应的文件,(记得close); 然后使用jieba模块中的load_userdict()方法导入词库 importjieba importnumpy importcodecs importpandas fi...

python 操作openpyxl导出Excel 设置单元格格式以及合并处理

贴上一个例子,里面设计很多用法,根据将相同日期的某些行合并处理。 from openpyxl importWorkbook...

Python项目读取配置的几种方式

1. 将配置写在Python文件中 配置文件(config.py 或 settings.py) 通常放置在程序源代码的目录,方便引用 配置文件 # settings.py class Config(object): DEBUG = False TESTING = False DATABASE_URI = 'sqlite://:memo...

C++程序员学Python:C与Python进行交互

1.C调用python 其实C与python的交互很简单,最简单的就是下面的例子: 1 Py_Initialize(); 2 3 PyRun_SimpleString("str = \"hello\""); 4 PyRun_SimpleString("print str"); 5 6 Py_Finalize(); 与C在进入main函数前要做一些准备工...

Python学习笔记:SQL中group_concat分组合并操作实现

一、背景 MySQL学习笔记:concat、concat_ws、group_concat —— 字符串连接 如何利用 Pandas 实现 SQL 中的 group_concat 操作? 二、实操 1.构造测试数据集 import pandas as pd import numpy as np df = pd.DataFrame({ 'nam...