一:方法和思路
2.對檔案的操作:os庫里有對檔案的操作方法,比如:os.remove()可以刪除指定的檔案, os.listdir()可以通過指定資料夾路徑獲取資料夾裡所有檔案的檔名
思路:通過獲取指定資料夾的所有檔名,然後匹配為乙個絕對路徑的列表,迴圈的比對每個檔案的md5值,如果md5值重複,則刪除這個檔案
二:**實現
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
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:
# print(md5list)
print("一共%s張**"%len(md5list))
然後我們可以通過日誌來檢視到底哪些檔案是重複的,不過對於一些超大檔案的話,md5值的獲取會有一些變化,不過處理一般的小檔案都可以的,只需要替換我的路徑,就可以在你電腦上執行啦
使用 Python 刪除乙個資料夾裡的所有空資料夾
import os def del emp dir path for root,dirs,files in os.walk path for item in dirs dir os.path.join root,item try os.rmdir dir print dir except excep...
利用python實現刪除資料夾裡某些特定檔案
import os import shutil 這個函式是用來遞迴遍歷資料夾裡面所有內容,包括資料夾和檔案,將它們分開放到兩個列表 顧名思義 file list 是放檔案的 dir list 是放目錄的 defget file path root path,file list,dir list 獲取...
使用IO流無法刪除本地檔案的原因
private void deletelocalfile final string filename 以上 正確,但是就是無法刪除檔案,原因是 你的上乙個io流沒有關閉,也就是沒有呼叫close 建議以後用到io流的地方在try.catch後都加上finally,即防止了資源浪費也防止了影響下面 的...