1. 程式人生 > 程式設計 >Python實現檢測檔案的MD5值來查詢重複檔案案例

Python實現檢測檔案的MD5值來查詢重複檔案案例

平時學生交上機作業的時候經常有人相互複製,直接改檔名了事,為了能夠簡單的檢測這種作弊行為,想到了檢測檔案的MD5值,雖然對於抄襲來說作用不大,但是聊勝於無,以後可以做一個複雜點的。

# coding: utf8

import hashlib
import os
from collections import Counter
import sys

reload(sys)
sys.setdefaultencoding('utf-8')

def get_md5_01(file_path):
  md5 = None
  if os.path.isfile(file_path):
    f = open(file_path,'rb')
    md5_obj = hashlib.md5()
    md5_obj.update(f.read())
    hash_code = md5_obj.hexdigest()
    f.close()
    md5 = str(hash_code).lower()
  return md5

def get_md5_02(file_path):
  f = open(file_path,'rb') 
  md5_obj = hashlib.md5()
  while True:
    d = f.read(8096)
    if not d:
      break
    md5_obj.update(d)
  hash_code = md5_obj.hexdigest()
  f.close()
  md5 = str(hash_code).lower()
  return md5

if __name__ == "__main__":
  output_list=[]
  #input_path=r"e:\xx\新建資料夾"
  #output_path = unicode(input_path,"utf8")
  output_path=os.getcwd()
  g = os.walk(output_path) 
  for path,dir_list,file_list in g: 
    for file_name in file_list:
      output_list.append(os.path.join(path,file_name) )
  md5_list= [get_md5_01(i) for i in output_list]
  Counter_list=Counter(md5_list)
  for i in Counter_list.items():
    if i[1] >1:
      duplicate_list=[ a for a in range(len(md5_list)) if md5_list[a] == i[0]]
      print '-'*50
      print i[0]
      for j in duplicate_list:
        with open('duplicate.log',mode='a+') as f:
          f.write(i[0]+'\t'+output_list[j]+'\n')
        print output_list[j]

補充知識:python一句話校驗檔案雜湊值

MD5

python -c "import hashlib,sys;print hashlib.md5(open(sys.argv[1],'rb').read()).hexdigest()" 檔名

SHA-1

python -c "import hashlib,sys;print hashlib.sha1(open(sys.argv[1],'rb').read()).hexdigest()" 檔名

SHA-256

python -c "import hashlib,sys;print hashlib.sha256(open(sys.argv[1],'rb').read()).hexdigest()" 檔名

SHA-512

python -c "import hashlib,sys;print hashlib.sha512(open(sys.argv[1],'rb').read()).hexdigest()" 檔名

以上這篇Python實現檢測檔案的MD5值來查詢重複檔案案例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。