欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)清除文件夾中重復(fù)視頻

 更新時(shí)間:2022年05月27日 10:44:34   作者:小F  
本文將利用Python中的os、hashlib、shutil模塊實(shí)現(xiàn)對(duì)文件夾中的重復(fù)視頻進(jìn)行清除,實(shí)現(xiàn)文件夾中無(wú)重復(fù)文件情況發(fā)生,需要的可以參考一下

前言

在早期學(xué)Python的時(shí)候,買了一本《Python編程快速上手-讓繁瑣工作自動(dòng)化》。

這本書里面講得都比較基礎(chǔ),不過卻非常的實(shí)用。

估計(jì)從書名大家伙們就應(yīng)該能體會(huì)到。

本次根據(jù)書中的「讀寫文件」章節(jié)內(nèi)容,實(shí)現(xiàn)一個(gè)簡(jiǎn)單又實(shí)用的小操作。

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

利用這三個(gè)模塊實(shí)現(xiàn)對(duì)文件夾中的重復(fù)視頻進(jìn)行清除,實(shí)現(xiàn)文件夾中無(wú)重復(fù)文件情況發(fā)生。

1.科普

在進(jìn)行代碼操作前,簡(jiǎn)單對(duì)相關(guān)知識(shí)做個(gè)簡(jiǎn)單的學(xué)習(xí)。

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

這樣才能做到舉一反三,提高學(xué)習(xí)效率。

二進(jìn)制文件

二進(jìn)制文件是以文本的二進(jìn)制形式存儲(chǔ)在計(jì)算機(jī)中。

用戶一般不能直接讀取它們,需要通過相應(yīng)的軟件才能將其顯示出來(lái)。

二進(jìn)制文件一般是可執(zhí)行程序、圖形、圖像、聲音等等。

本次實(shí)現(xiàn)的就是圖像類型的文件,即視頻!

摘要算法(MD5)

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

它通過一個(gè)函數(shù),把任意長(zhǎng)度的數(shù)據(jù)轉(zhuǎn)換為一個(gè)長(zhǎng)度固定的數(shù)據(jù)串(通常用16進(jìn)制的字符串表示)。

即通過摘要函數(shù)對(duì)任意長(zhǎng)度的數(shù)據(jù)(data)計(jì)算出固定長(zhǎng)度的摘要(digest)。

目的是為了發(fā)現(xiàn)原始數(shù)據(jù)是否被人篡改過。

摘要算法之所以能指出數(shù)據(jù)是否被篡改過,是因?yàn)檎瘮?shù)是一個(gè)單向函數(shù),計(jì)算f(data)很容易,但通過digest反推data卻非常困難。

而且,對(duì)原始數(shù)據(jù)做一個(gè)bit的修改,都會(huì)導(dǎo)致計(jì)算出的摘要完全不同。

MD5是最常見的摘要算法,速度很快,生成結(jié)果是固定的128bit字節(jié),通常用一個(gè)32位的16進(jìn)制字符串表示。

摘要算法在很多地方都有廣泛的應(yīng)用。

不過它并不是加密算法,不能用于加密(因?yàn)闊o(wú)法通過摘要反推明文),只能用于防篡改。

它的單向計(jì)算特性決定了可以在不存儲(chǔ)明文口令的情況下驗(yàn)證用戶口令。

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

本次文件夾中的視頻就是使用MD5摘要算法,得到視頻的摘要。

相當(dāng)于給了視頻一個(gè)ID屬性,具備唯一性。

那么通過比較視頻的摘要,便可以清除重復(fù)的視頻。

我們知道重復(fù)視頻的文件大小肯定是一樣的,那么通過文件大小應(yīng)該也是可以清除重復(fù)的視頻。

只不過有時(shí)也會(huì)有不重復(fù)的視頻大小一樣的,畢竟視頻大小只是個(gè)物理屬性,不具備唯一性。

shutil模塊

shutil是高級(jí)的文件,文件夾,壓縮包處理模塊。

shutil.copyfile(old, new),拷貝文件函數(shù)(就是復(fù)制的意思)。

2.視頻清除

以之前自動(dòng)化獲取的抖音視頻為例。

共183個(gè)抖音視頻。

視頻全在一個(gè)文件夾里

我新建了兩種文件夾,一種視頻全在一個(gè)文件夾里的。

這種使用視頻大小作為篩選比較。

清除重復(fù)視頻代碼如下。

import os
import shutil

# 遞歸文件夾創(chuàng)建
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)
    # 如果不是重復(fù)視頻的話,大小應(yīng)該和列表中數(shù)據(jù)不一樣
    if file_size not in size_list:
        # 獲取不重復(fù)視頻的大小
        size_list.append(file_size)
        # 獲取不重復(fù)視頻的路徑
        name_list.append(file_path)

# 使用shutil模塊的copyfile函數(shù),復(fù)制文件到新的文件夾中去
num = 0
for filename in name_list:
    num += 1
    oldname= filename
    newname= 'F:\\video\\douyin_11\\' + str(num) + '.mp4'
    shutil.copyfile(oldname, newname)

最后在新的文件夾中生成了183個(gè)視頻文件。

說明成功清除了重復(fù)的視頻文件。

視頻在不同的文件夾里

另一種視頻分為幾個(gè)部分,分別在不同文件夾下。

與上面不同的是,需要遍歷文件夾,然后再去遍歷文件夾中的文件。

另外使用摘要算法(MD5),生成視頻的特有ID,以此作為標(biāo)準(zhǔn)。

清除重復(fù)視頻代碼如下。

import os
import shutil
import hashlib


# 摘要算法(MD5)實(shí)現(xiàn)視頻摘要獲取
def getmd5(file_path):
    # 判斷文件路徑是否存在及文件是否為一個(gè)文件,意思應(yīng)該是文件夾就會(huì)報(bào)錯(cuò)
    if not os.path.isfile(file_path):
        return
    # rb,以二進(jìn)制讀模式打開
    vediofile = open(file_path, 'rb')
    md5 = hashlib.md5()
    md5.update(vediofile.read())
    vediofile.close()
    # 返回視頻文件的MD5值
    return md5.hexdigest()

# 遞歸文件夾創(chuàng)建
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)
        # 如果不是重復(fù)視頻的話,MD5值應(yīng)和列表中數(shù)據(jù)不一樣
        if value not in value_list:
            # 獲取不重復(fù)視頻的MD5值
            value_list.append(value)
            # 獲取不重復(fù)視頻的路徑
            name_list.append(file_path)

# 使用shutil模塊的copyfile函數(shù),復(fù)制文件到新的文件夾中去
num = 0
for filename in name_list:
    num += 1
    oldname= filename
    newname= 'F:\\video\\douyin_22\\' + str(num) + '.mp4'
    shutil.copyfile(oldname, newname)

最后也在新的文件夾中生成了183個(gè)視頻文件。

說明也成功清除了重復(fù)的視頻文件。

3.總結(jié)

試想一下如果你手動(dòng)去刪除這些重復(fù)的視頻,該有多浪費(fèi)時(shí)間。

這里也許你就能感受到了編程的樂趣了。

當(dāng)然其他文件,類似文本文檔、圖片、音頻,同樣可以利用Python進(jìn)行自動(dòng)化操作。

到此這篇關(guān)于Python實(shí)現(xiàn)清除文件夾中重復(fù)視頻的文章就介紹到這了,更多相關(guān)Python清除重復(fù)視頻內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實(shí)現(xiàn)獲取當(dāng)前日期的所屬信息

    Python實(shí)現(xiàn)獲取當(dāng)前日期的所屬信息

    在Python中,處理日期和時(shí)間是一個(gè)常見的任務(wù),它涉及到許多方面,例如獲取日期的年、月、日、星期幾等等,本文將詳細(xì)介紹如何使用Python來(lái)獲取當(dāng)前日期的各種相關(guān)信息,需要的可以了解下
    2024-01-01
  • python 通過文件夾導(dǎo)入包的操作

    python 通過文件夾導(dǎo)入包的操作

    這篇文章主要介紹了python 通過文件夾導(dǎo)入包的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-06-06
  • Python中常見的反爬機(jī)制及其破解方法總結(jié)

    Python中常見的反爬機(jī)制及其破解方法總結(jié)

    今天給大家?guī)?lái)的文章是關(guān)于Python的相關(guān)知識(shí),文章圍繞著Python中常見的反爬機(jī)制及其破解方法展開,文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06
  • python實(shí)現(xiàn)線程池的方法

    python實(shí)現(xiàn)線程池的方法

    這篇文章主要介紹了python實(shí)現(xiàn)線程池的方法,實(shí)例分析了Python線程池的原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-06-06
  • Python struct.unpack

    Python struct.unpack

    Python中按一定的格式取出某字符串中的子字符串,使用struck.unpack是非常高效的。
    2008-09-09
  • python基于itchat模塊實(shí)現(xiàn)微信防撤回

    python基于itchat模塊實(shí)現(xiàn)微信防撤回

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)微信防撤回,基于itchat模塊,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • wxpython自定義下拉列表框過程圖解

    wxpython自定義下拉列表框過程圖解

    這篇文章主要介紹了wxpython自定義下拉列表框過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Python+unittest+requests+excel實(shí)現(xiàn)接口自動(dòng)化測(cè)試框架

    Python+unittest+requests+excel實(shí)現(xiàn)接口自動(dòng)化測(cè)試框架

    這篇文章主要介紹了Python+unittest+requests+excel實(shí)現(xiàn)接口自動(dòng)化測(cè)試框架,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • PyHacker編寫URL批量采集器

    PyHacker編寫URL批量采集器

    這篇文章主要為大家介紹了SpringBoot整合VUE?EasyExcel實(shí)現(xiàn)數(shù)據(jù)導(dǎo)入導(dǎo)出,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • python實(shí)現(xiàn)無(wú)證書加密解密實(shí)例

    python實(shí)現(xiàn)無(wú)證書加密解密實(shí)例

    這篇文章主要介紹了python實(shí)現(xiàn)無(wú)證書加密解密的方法,實(shí)例講述了無(wú)證書加密解密的原理與具體實(shí)現(xiàn)過程,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10

最新評(píng)論