首頁 > 軟體

Python實現清理重複檔案功能的範例程式碼

2022-07-26 18:02:52

在電腦上或多或少的存在一些重複檔案,體積小的倒沒什麼,如果體積大的就很佔記憶體了,而如果自己一個一個檢視檔案是否重複,然後再刪除,還是很要命的。

為此,我用python製作了一個刪除重複檔案的小工具,核心程式碼很簡單,就十行程式碼,不管什麼型別的檔案都可以一鍵刪除!

前置

PySimpleGUI庫用來建立視覺化介面,os操作檔案,只需要這兩個庫:

import os
import PySimpleGUI as sg

os為內建庫,PySimpleGUI使用pip命令安裝即可:

pip install 庫名

查詢、刪除重複檔案

查詢重複檔案分為兩步:

第一步是獲得需要查詢的檔案路徑;

第二步是各個檔案進行對比出重複檔案。

這裡用os.walk()遍歷資料夾下的所有檔案,該函數可以得到一個三元元組(root,dirs,files),引數含義如下:

  • root:所指的是當前正在遍歷的這個資料夾的本身的地址;
  • dirs:是一個 list ,內容是該資料夾中所有的目錄的名字(不包括子目錄);
  • files:同樣是 list , 內容是該資料夾中所有的檔案(不包括子目錄)。

file_path即walk()函數中的引數top,是你所要遍歷的目錄的路徑,C、D槽或者指定資料夾均可:

 for root, dirs, files in os.walk(file_path):
     for file in files:
      # 組合得到資料夾所有檔案的路徑
         path = os.path.join(root, file)

得到所有的檔案路徑後,對其進行讀取,不同的檔案格式讀取出來的內容都是不同的,然後通過字典對映的方式儲存讀取的內容和路徑,接著只需要進行判斷是否有重複的內容,有的話根據路徑用os.remove()進行刪除:

dict = {}
f = open(path, 'rb').read()
if f in dict:
     # 刪除
     os.remove(path)
     print('刪除重複檔案:', path)
 else:
     dict[f] = path

以上就是核心程式碼,一共十行。

GUI製作

為了以後方便使用,不用一次次跑程式,而在原有的程式基礎上進行GUI製作,最後打包成.exe可執行檔案。

GUI介面設計

介面我只做了個簡單的基礎版本,相關內容可以看千圖成像,有興趣的還可以加入“選擇需要刪除檔案格式”的選項,進行選擇性刪除。

# 主題設定
sg.theme('LightBrown3')  

# 佈局設定
layout = [
    [sg.Frame(layout=[
        [sg.InputText(key='file_path', size=(41, 1), font=("微軟雅黑", 10), enable_events=True),
         sg.FolderBrowse('選擇資料夾',
                       font=("微軟雅黑", 12)),
         ],
    ],
        title='資料夾選擇', title_color='blue', font=("微軟雅黑", 10), relief=sg.RELIEF_SUNKEN, )],
    [sg.Frame(layout=[
        [sg.Output(size=(51, 10), font=("微軟雅黑", 10))],
    ],
        title='資訊展示', title_color='blue', font=("微軟雅黑", 10), relief=sg.RELIEF_SUNKEN, )],

    [sg.Button('開始刪除', font=("微軟雅黑", 12)),
     sg.Text('', font=("微軟雅黑", 12), size=(27, 0)), sg.Button('退出程式', font=("微軟雅黑", 12), button_color='red')]
]

# 建立視窗
window = sg.Window('刪除重複檔案', layout, font=("微軟雅黑", 12), default_element_size=(80, 1))

filepath = []

# 事件迴圈
while True:
    # 退出按鈕
    event, values = window.read()
    if event in (None, '退出程式'):
        break
window.close()

介面效果如下:

GUI介面效果

邏輯設計

獲取資料夾路徑,把得到的路徑存入列表中:

 if event == 'file_path':
    files = values['file_path']
    if os.path.exists(files):
        filepath.append(files)
    else:
        print('資料夾不存在,請重新選擇!')
        sg.popup('資料夾不存在,請重新選擇!')

啟動按鈕,點選時把路徑列表傳入main函數中:

if event == '開始刪除':
    if len(filepath) != 0:
        main(filepath)
    else:
        sg.popup('資料夾未選擇!')

GUI打包

打包可以直接使用pyinstaller進行安裝;如果你不知道怎麼打包,或者不熟悉命令列操作,可以使用前面文章:打包工具,這款打包工具可以簡單的滿足打包需求。

使用pyinstaller庫打包,啟動命令列視窗,在命令列視窗cd到檔案所在的檔案目錄中,最後用下面命令進行打包:

pyinstaller -F -w 名稱.py

打包過程沒出現什麼狀況,會得到幾個檔案,進入dist資料夾,就可以看見.exe檔案了。

效果展示

範例結果

至此,我們就成功利用Python實現了清理重複檔案工具。

到此這篇關於Python實現清理重複檔案功能的範例程式碼的文章就介紹到這了,更多相關Python清理重複檔案內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


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