我需要从文件中读取内容。 sha256摘要是先前计算的。为确保文件未更改,我想在读取时再次计算其sha256摘要,并对照先前计算的值对其进行检查。如果值不匹配,应通知我。
执行此操作的pythonic方法是什么?我在下面发布了工作代码,但是可能有更好的方法或现有的库来实现。
答案 0 :(得分:2)
import hashlib
import io
class Sha256File:
def __init__(self, fo, hashvalue):
self._fo = fo
self.hashvalue = hashvalue
def __enter__(self):
self._m = hashlib.sha256()
return self
def read(self, size=-1):
b = self._fo.read(size)
self._m.update(b)
return b
def __iter__(self):
return self
def __next__(self):
b = self.read()
if b == b'':
raise StopIteration
return b
def __exit__(self, exc_type, exc_value, traceback):
if exc_type is None:
assert self._m.hexdigest() == self.hashvalue
self._fo.close()
hashvalue = '5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03'
with Sha256File(io.BytesIO(b'hello\n'), hashvalue) as f:
for line in f:
print(line)