- 论坛徽章:
- 0
|
回复 #1 jklyekai 的帖子
if "preserve" in self.attrs and os.path.isfile(final_path):
cfile = file(final_path)
chash = sha.sha(cfile.read()).hexdigest()
第一步:判断被校验的文件是否存在
第二步:打开文件, 这里应该用二进制打开方式:cfile = file(final_path, ‘rb’)
第三步:cfile.read(),表示将文件的内容读取到内存中,调用python的校验函数sha.sha()对刚才读取到的文件内容进行校验
hexdigest()将刚才校验的结果用字符串输出
你这里有两个问题:
第一,打开文件方式应该用二进制方式
第二,你读文件的方式为一次性将文件全部读到内存中,当文件太大时,内存不够,程序会崩掉。建议迭代校验
示例:
import sha
def get_sha1sum(path):
f = file(path, 'rb')
m = sha.sha()
while True:
l = f.read(1024)
if len(l) == 0:
break
else:
m.update(l)
s = m.hexdigest()
f.close()
return s |
你可以先判断文件是否存在,然后用上面的函数得到sha1值,
上面是迭代的,每次读取1024个字节进行校验,等校验完毕后,返回结果字符串 |
|