python 复制文件夹校验_利用python 校验文件完整性

方法如下 :

# -*- coding: UTF-8 -*-

######################################

import sys,os

import hashlib

import binascii

import time

######################################

Des_path = r'F:\flycony\Documents'

#1 生成md5 2 校验md5

type = 2

######################################

def main(path):

if type == 1 :

creat_md5_file(path)

elif type == 2 :

verify_md5_file(path)

def get_file_md5(file):

m = hashlib.md5()

with open(file, mode='rb') as f:

while True:

data = f.read(10240)

if not data:

break

m.update(data)

return m.hexdigest().upper()

def get_file_sha1(file):

m = hashlib.sha1()

with open(file, mode='rb') as f:

while True:

data = f.read(10240)

if not data:

break

m.update(data)

return m.hexdigest().upper()

def get_file_sha256(file):

m = hashlib.sha256()

with open(file, mode='rb') as f:

while True:

data = f.read(10240)

if not data:

break

m.update(data)

return m.hexdigest().upper()

def get_file_crc32(file):

blocksize = 1024 * 64

with open(file, mode='rb') as f:

crc = 0

while True:

data = f.read(blocksize)

if not data:

break

crc = binascii.crc32(data, crc)

return hex(crc)[2:].upper()

def get_file_mtime(file):

return time.ctime(os.stat(file).st_mtime)

def list_current_dir(path):

os.chdir(path)

dir_list = []

file_list = []

path_list=os.listdir(path)

for obj_name in path_list:

if os.path.isdir(obj_name):

dir_list.append(obj_name)

else:

file_list.append(obj_name)

return (file_list, dir_list)

def list_current_dir_allfile(path):

os.chdir(path)

dir_list = []

file_list = []

path_list=os.listdir(path)

for obj_name in path_list:

if os.path.isdir(obj_name):

dir_list.append(os.path.join(path, obj_name))

else:

file_list.append(os.path.join(path, obj_name))

if dir_list:

for obj in dir_list:

file_list = file_list + list_current_dir_allfile(obj)

return file_list

def creat_md5_file(path):

file_list = list_current_dir_allfile(path)

md5_path = path + '.md5'

if file_list:

for file in file_list:

file_md5 = get_file_md5(file)

print(file)

print('md5 : %s' % file_md5)

file_sha256 = get_file_sha256(file)

print('sha256 : %s' % file_sha256)

md5_file_name = file.replace(path, md5_path) + '.md5'

md5_file_path = os.path.dirname(md5_file_name)

if not os.path.exists(md5_file_path) :

os.makedirs(md5_file_path.encode("utf-8"))

with open(md5_file_name, mode= 'w') as f:

f.write(file_md5 + '\n' + file_sha256 + '\n')

def verify_md5_file(path):

file_list = list_current_dir_allfile(path)

md5_path = path + '.md5'

if file_list:

for file in file_list:

print(file)

md5_file_name = file.replace(path, md5_path) + '.md5'

md5_file_path = os.path.dirname(md5_file_name)

if not os.path.exists(md5_file_path) :

print('The md5 file is not exist !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')

break

with open(md5_file_name, mode= 'r') as f:

file_md5_old = f.readline().strip()

file_sha256_old = f.readline().strip()

file_md5 = get_file_md5(file)

print('md5 : %s' % file_md5)

print('md5_original : %s' % file_md5_old)

file_sha256 = get_file_sha256(file)

print('sha256 : %s' % file_sha256)

print('sha256_original : %s' % file_sha256_old)

if file_md5 != file_md5_old or file_sha256 != file_sha256_old :

print('The file is damage !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')

break

else:

print('verify pass !')

#file_path = r'F:\flycony\Downloads\3.00.20回传\USB\T8000-18 400G\版本\T8000-400.set'

#file_md5 = get_file_md5(file_path)

#file_sha1 = get_file_sha1(file_path)

#file_crc32 = get_file_crc32(file_path)

#file_mtime = get_file_mtime(file_path)

#file_sha256 = get_file_sha256(file_path)

#print(file_mtime)

#print(file_crc32)

#print(file_md5)

#print(file_sha1)

#print(file_sha256)

# ========================================================

main(Des_path)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值