Python实现清除文件夹中重复视频

目录
  • 前言
  • 1.科普
    • 二进制文件
    • 摘要算法(MD5)
    • shutil模块
  • 2.视频清除
    • 视频全在一个文件夹里
    • 视频在不同的文件夹里
  • 3.总结

前言

在早期学Python的时候,买了一本《Python编程快速上手-让繁琐工作自动化》。

这本书里面讲得都比较基础,不过却非常的实用。

估计从书名大家伙们就应该能体会到。

本次根据书中的「读写文件」章节内容,实现一个简单又实用的小操作。

涉及到的模块有os、hashlib、shutil。

利用这三个模块实现对文件夹中的重复视频进行清除,实现文件夹中无重复文件情况发生。

1.科普

在进行代码操作前,简单对相关知识做个简单的学习。

毕竟我们不能停留在表象,要去明白它们的原理。

这样才能做到举一反三,提高学习效率。

二进制文件

二进制文件是以文本的二进制形式存储在计算机中。

用户一般不能直接读取它们,需要通过相应的软件才能将其显示出来。

二进制文件一般是可执行程序、图形、图像、声音等等。

本次实现的就是图像类型的文件,即视频!

摘要算法(MD5)

摘要算法又称哈希算法、散列算法。

它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。

即通过摘要函数对任意长度的数据(data)计算出固定长度的摘要(digest)。

目的是为了发现原始数据是否被人篡改过。

摘要算法之所以能指出数据是否被篡改过,是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。

而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。

MD5是最常见的摘要算法,速度很快,生成结果是固定的128bit字节,通常用一个32位的16进制字符串表示。

摘要算法在很多地方都有广泛的应用。

不过它并不是加密算法,不能用于加密(因为无法通过摘要反推明文),只能用于防篡改。

它的单向计算特性决定了可以在不存储明文口令的情况下验证用户口令。

其中Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。

本次文件夹中的视频就是使用MD5摘要算法,得到视频的摘要。

相当于给了视频一个ID属性,具备唯一性。

那么通过比较视频的摘要,便可以清除重复的视频。

我们知道重复视频的文件大小肯定是一样的,那么通过文件大小应该也是可以清除重复的视频。

只不过有时也会有不重复的视频大小一样的,毕竟视频大小只是个物理属性,不具备唯一性。

shutil模块

shutil是高级的文件,文件夹,压缩包处理模块。

shutil.copyfile(old, new),拷贝文件函数(就是复制的意思)。

2.视频清除

以之前自动化获取的抖音视频为例。

共183个抖音视频。

视频全在一个文件夹里

我新建了两种文件夹,一种视频全在一个文件夹里的。

这种使用视频大小作为筛选比较。

清除重复视频代码如下。

import os
import shutil

# 递归文件夹创建
folder_path = 'F:/video/douyin_11'
os.makedirs(folder_path)
# 获取文件夹里的文件名字符串列表
filenames = os.listdir('F:\\video\\douyin_1')

(size_list, name_list) = ([], [])
for name in filenames:
    # 获取文件的路径
    file_path = 'F:\\video\\douyin_1\\' + name
    # 获取文件的大小
    file_size = os.path.getsize(file_path)
    # 如果不是重复视频的话,大小应该和列表中数据不一样
    if file_size not in size_list:
        # 获取不重复视频的大小
        size_list.append(file_size)
        # 获取不重复视频的路径
        name_list.append(file_path)

# 使用shutil模块的copyfile函数,复制文件到新的文件夹中去
num = 0
for filename in name_list:
    num += 1
    oldname= filename
    newname= 'F:\\video\\douyin_11\\' + str(num) + '.mp4'
    shutil.copyfile(oldname, newname)

最后在新的文件夹中生成了183个视频文件。

说明成功清除了重复的视频文件。

视频在不同的文件夹里

另一种视频分为几个部分,分别在不同文件夹下。

与上面不同的是,需要遍历文件夹,然后再去遍历文件夹中的文件。

另外使用摘要算法(MD5),生成视频的特有ID,以此作为标准。

清除重复视频代码如下。

import os
import shutil
import hashlib

# 摘要算法(MD5)实现视频摘要获取
def getmd5(file_path):
    # 判断文件路径是否存在及文件是否为一个文件,意思应该是文件夹就会报错
    if not os.path.isfile(file_path):
        return
    # rb,以二进制读模式打开
    vediofile = open(file_path, 'rb')
    md5 = hashlib.md5()
    md5.update(vediofile.read())
    vediofile.close()
    # 返回视频文件的MD5值
    return md5.hexdigest()

# 递归文件夹创建
folder_path = "F:/video/douyin_22"
os.makedirs(folder_path)
# 获取文件夹里的文件夹名字符串列表
foldernames = os.listdir('F:\\video\\douyin_2')

(value_list, name_list) = ([], [])
for folder in foldernames:
    # 获取文件夹的路径
    folder_name = 'F:\\video\\douyin_2\\' + folder
    # 获取文件夹里的文件名字符串列表
    file_names = os.listdir(folder_name)
    for file_name in file_names:
        # 获取文件的路径
        file_path = folder_name + '\\' + file_name
        # 获取文件的MD5值
        value = getmd5(file_path)
        # 如果不是重复视频的话,MD5值应和列表中数据不一样
        if value not in value_list:
            # 获取不重复视频的MD5值
            value_list.append(value)
            # 获取不重复视频的路径
            name_list.append(file_path)

# 使用shutil模块的copyfile函数,复制文件到新的文件夹中去
num = 0
for filename in name_list:
    num += 1
    oldname= filename
    newname= 'F:\\video\\douyin_22\\' + str(num) + '.mp4'
    shutil.copyfile(oldname, newname)

最后也在新的文件夹中生成了183个视频文件。

说明也成功清除了重复的视频文件。

3.总结

试想一下如果你手动去删除这些重复的视频,该有多浪费时间。

这里也许你就能感受到了编程的乐趣了。

当然其他文件,类似文本文档、图片、音频,同样可以利用Python进行自动化操作。

到此这篇关于Python实现清除文件夹中重复视频的文章就介绍到这了,更多相关Python清除重复视频内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python轻松搞定视频剪辑重复性工作问题

    目录 01 安装 02 剪辑 01 安装 对视频进行批量剪辑,需要三个库,分别是Moviepy库和Pathlib库,还有Tkinter库. 首先我们对这两个库进行安装,命令如下: pip install moviepy pip install pathlib 02 剪辑 上面我们已经安装好所需要的库了,现在开始来对视频进行剪辑操作. 视频剪辑: Moviepy库有一个VideoFileClip函数,将视频传入这个函数后,会返回一个VideoFileClip实例对象,该对象可以被subclip()

  • Python自动化办公之清理重复文件详解

    目录 清理重复的文件 清理重复文件的优化 清理重复的文件 已知条件: 什么都不知道,只需要知道它是文件就可以了 实现方法: 可以从指定路径(或最上层路径)开始读取,利用 glob 读取每个文件夹,读到文件,记录名称和大小,每一次检测之前是否读取过相同名称的文件,如果存在,判断大小是否相同,如果相同,我们就认为这是重复文件,将其删除. 代码示例如下: # coding:utf-8 import glob import os.path data = {} # 定义一个空的字典,暂时将文件名存进来 d

  • python编程实现清理微信重复缓存文件

    目录 glob 模块 glob方法 zlib.crc32 去重复 总结 文 | 某某白米饭 来源:Python 技术「ID: pythonall」 微信和 QQ 都有一个存放缓存文件的文件夹,微信在设置 --> 文件管理,QQ 在系统设置 --> 基本设置 --> 文件管理 --> 打卡个人文件中找到它,平时大家对这个文件夹关注度不高,这个文件夹慢慢的,偷偷的就占用了好几十个 G 的磁盘空间.下面就用 Python 写个删除重复文件的脚本清理这些空间. glob 模块 glob 模

  • python实现自动清理重复文件

    前言 大家好,又到了Python办公自动化系列. 今天分享一个系统层面的自动化案例: 「给定一个文件夹,使用Python检查给定文件夹下有无文件重复,若存在重复则删除」 主要涉及的知识点有: os模块综合应用 glob模块综合应用 利用filecmp模块比较两个文件 步骤分析 该程序实现的逻辑可以具化为: 遍历获取给定文件夹下的所有文件,然后通过嵌套循环两两比较文件是否相同,如果相同则删除后者. 实现问题的关键就变成了? 如何判断两个文件是否相同? 在这里我们可以使用filecmp模块,来看看官

  • 用Python自动清理电脑内重复文件,只要10行代码(自动脚本)

    给定一个文件夹,使用Python检查给定文件夹下有无文件重复,若存在重复则删除 主要涉及的知识点有: os模块综合应用 glob模块综合应用 利用filecmp模块比较两个文件 步骤分析 该程序实现的逻辑可以具化为: 遍历获取给定文件夹下的所有文件,然后通过嵌套循环两两比较文件是否相同,如果相同则删除后者. 实现问题的关键就变成了 如何判断两个文件是否相同? 在这里我们可以使用filecmp模块,来看看官方的介绍文档: filecmp.cmp(f1, f2, shallow=True) 比较名为

  • Python实现清除文件夹中重复视频

    目录 前言 1.科普 二进制文件 摘要算法(MD5) shutil模块 2.视频清除 视频全在一个文件夹里 视频在不同的文件夹里 3.总结 前言 在早期学Python的时候,买了一本<Python编程快速上手-让繁琐工作自动化>. 这本书里面讲得都比较基础,不过却非常的实用. 估计从书名大家伙们就应该能体会到. 本次根据书中的「读写文件」章节内容,实现一个简单又实用的小操作. 涉及到的模块有os.hashlib.shutil. 利用这三个模块实现对文件夹中的重复视频进行清除,实现文件夹中无重复

  • python 实现对文件夹中的图像连续重命名方法

    python实现的对文件夹中的图像进行连续的重命名方法: import os class BatchRename(): def __init__(self): self.path = 'C:/Users/zxl/Desktop/tr' def rename(self): filelist = os.listdir(self.path) total_num = len(filelist) i = 101 for item in filelist: if item.endswith('.jpg'):

  • Python导入父文件夹中模块并读取当前文件夹内的资源

    在某些特殊情况下,我们的 Python 脚本需要调用父目录下的其他模块.例如: 在编写 GNE 的测试用例时,有一个脚本 generate_new_cases.py放在 tests文件夹中.而 tests 文件夹与 gne 文件夹放在同一个位置.其中 gne 文件夹是一个包.我现在需要从generate_new_cases.py 文件中导入 gne 里面的一个类GeneralNewsExtractor. 为了简化问题,我单独写了一个演示的样例.它的文件结构与每个文件中的内容如下: 现在,我直接在

  • Python导入不同文件夹中文件的方法详解

    目录 前言 一.导入同一目录下的文件 二.导入不同目录下的文件 1. 调用子目录下的文件 2.导入上级目录下的文件 关于 init.py 附:python 导入一个文件夹下的所有文件 总结 前言 在写 python 程序的时候,经常会用到引入其他文件夹里的 py 文件,要是都在同目录下直接 import 就好了,可是有的不在同一个目录,很多时候就直接 import 报错了.下面介绍导入文件的方法: 一.导入同一目录下的文件 如下图,main.py 和 config.py 文件都在同一个目录. 如

  • Python导入其他文件夹中函数的实现方法

    主要是记录一下自己使用Python时的一些问题,还是很简单的,只是每次都要查很麻烦,所以干脆自己写一个记录一下,如果能解决各位同好的问题那就是锦上添花. 开门见山: 如果我要导入Encoder_analyze库中的两个.py文件(Alpha_utils.py 和 DCT_utils.py) 如果在Encoder_analyze文件中的话,就能直接使用import调用. 举个例子: DCT_utils.py中的函数定义 import numpy as np import copy import c

  • 用python删除文件夹中的重复图片(图片去重)

    第一部分:判断两张图片是否相同 要查找重复的图片,必然绕不开判断两张图片是否相同.判断两张图片简单呀!图片可以看成数组,比较两个数组是否相等不就行了.但是这样做太过简单粗暴,因为两个数组的每个元素都要一一比较,效率很低.为了尽量避免两个庞大的数组比较: 先进行两张图片的大小(byte)比较,若大小不相同,则两张图片不相同: 在两张图片的大小相同的前提下,进行两张图片的尺寸(长和宽)比较,若尺寸不相同,则两张不相同: 在两张图片的尺寸相同的前提下,进行两张图片的内容(即数组元素)比较,若内容不相同

  • python使用openCV遍历文件夹里所有视频文件并保存成图片

    如果你在文件夹里有很多视频,并且文件夹里还有文件夹,文件夹里的文件夹也有视频,怎么能逐个读取并且保存..所以我写了个代码用了os,walk,这个可以遍历所有文件夹里的文件和文件夹 import os import cv2 cut_frame = 250 # 多少帧截一次,自己设置就行 save_path = "C:\文献与资料\手持红外\图片" for root, dirs, files in os.walk(r"C:\文献与资料\手持红外"): # 这里就填文件夹

  • Python实现比较两个文件夹中代码变化的方法

    本文实例讲述了Python实现比较两个文件夹中代码变化的方法.分享给大家供大家参考.具体如下: 这里将修改代码后的目录与原始目录做对比,罗列出新增的代码文件,以及修改过的代码文件 # -*- coding: utf-8 -*- import os; folderA = "F:\\Projects\\FreeImageV3_14_1\\".lower(); folderB = u"E:\\Software\\图像解码库\\FreeImage3141\\FreeImage\\&q

  • 对python遍历文件夹中的所有jpg文件的实例详解

    python发现文件夹下所有的jpg文件,并且安装文件排放的顺序输出 glob模块是最简单的模块之一,内容非常少.用它可以查找符合特定规则的文件路径名.跟使用windows下的文件搜索差不多.查找文件只用到三个匹配符:"*", "?", "[]"."*"匹配0个或多个字符:"?"匹配单个字符:"[]"匹配指定范围内的字符,如:[0-9]匹配数字. glob.glob 返回所有匹配的文件路

  • 使用Python实现从各个子文件夹中复制指定文件的方法

    之前用来整理图片的小程序,拿来备忘,算是使用Python复制文件的一个例子. # -*- coding: utf-8 -*- #程序用来拷贝文件并输出图片采集日期等其他信息到Excel中 #文件夹结构: #2016_07_07 # -Data_07_07_001 # -Random1 # -image001_co.pgm # -image001_c1.pgm # -image002_co.pgm # -image002_c1.pgm # --- # -Random2 # --- # -Data_

随机推荐