import smbclient # pip install smbprotocol
import zlib
import re
import os
smbclient.register_session("10.x.x.x", username="123", password="123")
img_path = smbclient.listdir(r"\\10.x.x.x\img")
file_name = os.path.basename(img_path )
#方法1
# res = path.rsplit(‘.‘,1)[0].split(‘_‘)[1]
#方法2
res = re.search(r‘(0x\w+)\.tar‘,path)
file_checksum = res.group(1)
def read_in_chunks(filePath, chunk_size=1024*1024):
"""
Lazy function (generator) to read a file piece by piece.
Default chunk size: 1M
You can set your own chunk size
"""
# file_object = open(filePath)
file_object = smbclient.open_file(filePath,mode=‘rb‘)
while True:
chunk_data = file_object.read(chunk_size)
if not chunk_data:
break
yield chunk_data
def verify_file_checksum(file, checksum):
with open (file,‘rb‘) as f:
if zlib.adler32(f.read())==int(checksum,16):
print (‘checksum verification pass‘)
return True
print (‘checksum verification fail‘)
return False
if __name__ == "__main__":
os.remove(‘1.img‘)
for chunk in read_in_chunks(path):
with open(‘1.img‘,mode=‘ab‘) as fw:
fw.write(chunk)
verify_file_checksum(‘1.img‘,file_checksum)
def read_in_chunks(filePath, chunk_size=1024*1024):
"""
Lazy function (generator) to read a file piece by piece.
Default chunk size: 1M
You can set your own chunk size
"""
file_object = open(filePath)
while True:
chunk_data = file_object.read(chunk_size)
if not chunk_data:
break
yield chunk_data
if __name__ == "__main__":
filePath = ‘filename‘
for chunk in read_in_chunks(filePath):
process(chunk) # <do something with chunk>
原文:https://www.cnblogs.com/amize/p/14266472.html