上次的博文主要說了從網上下載圖片,于是我把整個笑話網站的圖片都拔下來了,但是在拔取的圖片中有很多重復的,比如說頁面的其他圖片、重復發布的圖片等等。所以我又找了python的一些方法,寫了一個腳本可以刪除指定文件夾里重復的圖片。
一、方法和思路
1.比對文件是否相同的方法:hashlib庫里提供了獲取文件md5值的方法,所以我們可以通過md5值來判定是否圖片相同
2.對文件的操作:os庫里有對文件的操作方法,比如:os.remove()可以刪除指定的文件, os.listdir()可以通過指定文件夾路徑獲取文件夾里所有文件的文件名
思路:通過獲取指定文件夾的所有文件名,然后匹配為一個絕對路徑的列表,循環的比對每個文件的md5值,如果md5值重復,則刪除這個文件
二、代碼實現
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
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) # 指定日志的最低輸出級別,默認為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\\煎蛋網\\無聊圖\\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 ( "重復:%s" % a) log.info( "重復:%s" % a) else : md5List.append(md5) # print(md5List) print ( "一共%s張照片" % len (md5List)) |
然后我們可以通過日志來查看到底哪些文件是重復的,不過對于一些超大文件的話,md5值的獲取會有一些變化,不過處理一般的小文件都可以的,只需要替換我的路徑,就可以在你電腦上運行啦。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/CCGGAAG/article/details/72877076