Python腳本清除文件夾中的重復(fù)視頻

      網(wǎng)友投稿 802 2022-05-30

      / 01 / 科普

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

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

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

      01 二進(jìn)制文件

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

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

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

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

      02 摘要算法(MD5)

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

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

      即通過摘要函數(shù)對(duì)任意長度的數(shù)據(jù)(data)計(jì)算出固定長度的摘要(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法通過摘要反推明文),只能用于防篡改。

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

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

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

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

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

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

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

      03 shutil模塊

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

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

      / 02 / 視頻清除

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

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

      01?視頻全在一個(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è)視頻文件。

      用Python腳本清除文件夾中的重復(fù)視頻

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

      02?視頻在不同的文件夾里

      另一種視頻分為幾個(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ù)的視頻文件。

      / 03 / 總結(jié)

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

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

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

      本文轉(zhuǎn)載自微信公眾號(hào)【java學(xué)習(xí)之道】。

      爬蟲 python

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:小伙機(jī)器學(xué)習(xí)之路,因?yàn)橛姓l?!BATJ 才那么 easy!
      下一篇:對(duì)接第三方軟件的時(shí)候 ,發(fā)現(xiàn)請(qǐng)求示例中 《curl -X PUT -H》這種格式
      相關(guān)文章
      亚洲精品福利网泷泽萝拉| 亚洲国产成人高清在线观看 | 中文字幕亚洲乱码熟女一区二区| 在线亚洲v日韩v| 久久精品国产亚洲麻豆| 亚洲精品午夜无码电影网| 麻豆亚洲AV成人无码久久精品 | 亚洲第一区精品日韩在线播放| 亚洲乱码中文字幕小综合| 亚洲成a人片在线观| 亚洲国产成人超福利久久精品| 亚洲精品国产情侣av在线| 亚洲精品无码久久久久久久| 亚洲视频网站在线观看| 亚洲欧洲春色校园另类小说| 亚洲电影在线免费观看| 亚洲男女一区二区三区| 亚洲国产情侣一区二区三区| 91午夜精品亚洲一区二区三区| 91亚洲精品自在在线观看| 亚洲美女视频一区二区三区| 亚洲AⅤ永久无码精品AA| 亚洲国产一区明星换脸| 亚洲精品成人片在线观看| 国产偷窥女洗浴在线观看亚洲| 亚洲精品专区在线观看| 亚洲精品无码av天堂| 久久久久无码专区亚洲av| 亚洲AV无码乱码在线观看牲色| 国产成人亚洲综合| 亚洲片一区二区三区| 亚洲日本国产综合高清| 亚洲国产电影av在线网址| 另类图片亚洲校园小说区| 亚洲av高清在线观看一区二区| 亚洲精品无码激情AV| 日本亚洲欧洲免费天堂午夜看片女人员| 香蕉视频在线观看亚洲| 日本亚洲国产一区二区三区 | 亚洲五月六月丁香激情| 久久91亚洲精品中文字幕|