首頁 > 軟體

詳解如何使用Python實現刪除重複檔案

2022-10-12 14:01:17

Python自動化辦公之刪除重複檔案

思路介紹

兩層判斷:

1.先判斷檔案大小是否為相同,大小不同則不是重複檔案,予以保留;

2.檔案大小相同再判斷檔案md5,md5相同,則是重複檔案,予以刪除。

原始碼解說

from pathlib import Path
import hashlib


def getmd5(filename):
    # 接收檔案路徑,返回檔案md5值
    with open(filename, 'rb') as f:
        data = f.read()
    file_md5 = hashlib.new("md5", data).hexdigest()
    return file_md5


def main():
    path = r"F:FileRecv刪除檔案測試"
    all_size = {}
    total_file = 0
    total_delete = 0

    # 獲取路徑內的所有檔名,預設是升序排列,相同檔案將會保留日期時間最新的
    all_files = Path(path).glob('*.*')

    # 降序排列,相同檔案將會保留檔名最短的(即日期時間最久的)
    all_files = sorted(all_files, reverse=True)

    # 遍歷檔案路徑內的所有檔案
    for file in all_files:
        # 獲取檔案所佔位元組大小,作為資料字典的鍵
        size = file.stat().st_size
        # name_and_md5列表用於儲存檔案絕對路徑和md5值,作為資料字典的值
        name_and_md5 = [file, '']

        # 針對重複檔案進行處理,生成字典儲存相關資訊
        # 字典all_size中key是size,value是name_and_md5列表
        # 針對相同size的檔案,再呼叫getmd5函數,獲取檔案的md5值
        # 檔案size不同(不在all_size.keys()中),則自動判斷為不同的檔案,予以保留
        if size in all_size.keys():
            # 呼叫getmd5函數,獲取檔案的md5值
            new_md5 = getmd5(file)
            if all_size[size][1] == '':
                all_size[size][1] = getmd5(all_size[size][0])
            # 判斷md5值存在,即檔案重複,則刪除檔案。md5值不存在,則把md5值加入列表中
            if new_md5 in all_size[size]:
                file.unlink()
                total_delete += 1
            else:
                all_size[size].append(new_md5)
        else:
            all_size[size] = name_and_md5
        total_file += 1

    print(f'檔案總數:{total_file}')
    print(f'刪除個數:{total_delete}')


if __name__ == '__main__':
    main()

效果圖:

程式碼說明:特別感謝瑜亮老師提供的程式碼!

知識拓展

pathlib和os,os.path常用的函數對應關係

pathlib常用方法介紹:

Path(path).name  # 返回檔名+檔案字尾

Path(path).stem  # 返回檔名

Path(path).suffix  # 返回檔案字尾

Path(path).suffixes  # 返回檔案字尾列表

Path(path).root  # 返回根目錄

Path(path).parts  # 返回檔案

Path(path).anchor  # 返回根目錄

Path(path).parent  # 返回父級目錄

Path(path).parents  # 返回所有上級目錄的列表

Path.exists()  # 判斷 Path 路徑是否是一個已存在的檔案或資料夾

Path.is_dir()  # 判斷 Path 是否是一個資料夾

Path.is_file()  # 判斷 Path 是否是一個檔案

Path.mkdir()  # 建立資料夾

Path.rmdir()  # 刪除資料夾,資料夾必須為空

Path.unlink()  # 刪除檔案

到此這篇關於詳解如何使用Python實現刪除重複檔案的文章就介紹到這了,更多相關Python刪除重複檔案內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com