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

Python實(shí)現(xiàn)刪除重復(fù)文件的示例代碼

 更新時間:2023年02月14日 16:16:25   作者:一青一檸  
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)刪除重復(fù)文件功能,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定的幫助,感興趣的小伙伴的可以了解一下

此程序主要是針對某個目錄下的全部文件進(jìn)行篩選,會刪除重復(fù)的文件。

原理很簡單,會計算每個文件的哈希,將哈希存入一個字典,文件名對應(yīng)哈希。

import os
import hashlib

def hash_file(filename):
    """Return the SHA-1 hash
    of the file content."""
    h = hashlib.sha1()
    with open(filename, 'rb') as f:
        while True:
            chunk = f.read(4096)
            if not chunk:
                break
            h.update(chunk)
    return h.hexdigest()

def remove_duplicate_files(path):
    """Remove duplicates files in the directory."""
    files_hash = {}
    i=0
    j=0
    sum=len(os.listdir(path))
    for dirpath, dirnames, filenames in os.walk(path):
        for filename in filenames:
            j=j+1
            print("執(zhí)行進(jìn)度為:",100*j/sum,"%")
            file_path = os.path.join(dirpath, filename)
            file_hash = hash_file(file_path)
            if file_hash in files_hash:
                os.remove(file_path)
                i=i+1
                # print(i)
            else:
                files_hash[file_hash] = file_path
    print("文件總數(shù)為:",sum)
    print("此處處理的重復(fù)文件數(shù)目為:",i)

在使用的時候直接調(diào)用下面那個函數(shù)即可,傳入?yún)?shù)為目錄路徑。

例如下面這樣:

remove_duplicate_files("Y:\圖片合集")

當(dāng)然,你也可以將程序打包為一個exe文件,甚至為它添加簡單的頁面,讓非計算機(jī)專業(yè)的人也能輕易使用。

補(bǔ)充

當(dāng)然除了上文的方法,還有很多方法可以實(shí)現(xiàn),下面是小編為大家整理的內(nèi)容,希望對大家有所幫助

Python刪除文件夾內(nèi)指定的重復(fù)文件

import os
import re


class file_clean:
    def __init__(self, folder, filerege):
        self.folder = folder
        self.filerege = filerege
        self.folder_generator = os.walk(self.folder)

    # 刪除所有文件夾及子文件夾下指定文件
    def del_all_file(self):
        for folder, subfolder, file_list in self.folder_generator:
            for file in file_list:
                if self.filerege == '*':
                    del_all_file = os.path.join(folder, file)
                    os.remove(del_all_file)
                elif re.findall(self.filerege, file):
                    del_all_file = os.path.join(folder, file)
                    print(del_all_file)
                    os.remove(del_all_file)

    # 只刪除所有文件夾下的指定文件
    def del_file(self):
        for folder, subfolder, file_list in self.folder_generator:
            if os.path.dirname(folder) == os.path.dirname(self.folder):
                for file in file_list:
                    if self.filerege == '*':
                        del_file = os.path.join(folder, file)
                        os.remove(del_file)
                    elif re.findall(self.filerege, file):
                        del_file = os.path.join(folder, file)
                        print(del_file)
                        os.remove(del_file)


if __name__ == '__main__':
    # 選擇文件夾路徑 D盤C盤目錄需要使用雙斜杠r'D:\\', '\.wedrive'
    go = file_clean(r'D:\eong', '\.WeDrive')
    # 選擇要執(zhí)行的函數(shù)類型del_all_file刪除件夾及子文件夾下指定文件,del_file只刪除當(dāng)前選擇文件夾的指定文件
    go.del_file()

python刪除本地夾里重復(fù)文件的方法

import os 
import hashlib 
import logging 
import sys 
 
def logger(): 
 """ 獲取logger""" 
 logger = logging.getLogger() 
 if not logger.handlers: 
 # 指定logger輸出格式 
 formatter = logging.Formatter('%(asctime)s %(levelname)-8s: %(message)s') 
 # 文件日志 
 file_handler = logging.FileHandler("test.log") 
 file_handler.setFormatter(formatter) # 可以通過setFormatter指定輸出格式 
 # 控制臺日志 
 console_handler = logging.StreamHandler(sys.stdout) 
 console_handler.formatter = formatter # 也可以直接給formatter賦值 
 # 為logger添加的日志處理器 
 logger.addHandler(file_handler) 
 logger.addHandler(console_handler) 
 # 指定日志的最低輸出級別,默認(rèn)為WARN級別 
 logger.setLevel(logging.INFO) 
 return logger 
 
def get_md5(filename): 
 m = hashlib.md5() 
 mfile = open(filename, "rb") 
 m.update(mfile.read()) 
 mfile.close() 
 md5_value = m.hexdigest() 
 return md5_value 
 
def get_urllist(): 
 #替換指定的文件夾路徑即可 
 base = ("F:\\pythonFile\\煎蛋網(wǎng)\\無聊圖\\jpg\\") 
 list = os.listdir(base) 
 urlList=[] 
 for i in list: 
 url = base + i 
 urlList.append(url) 
 return urlList 
 
if __name__ == '__main__': 
 log = logger() 
 md5List =[] 
 urlList =get_urllist() 
 for a in urlList: 
 md5 =get_md5(a) 
 if (md5 in md5List): 
  os.remove(a) 
  print("重復(fù):%s"%a) 
  log.info("重復(fù):%s"%a) 
 else: 
  md5List.append(md5) 
  # print(md5List) 
  print("一共%s張照片"%len(md5List)) 

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

相關(guān)文章

最新評論