由于项目需要对一个文本文件按行哈希,今天研究了一下python的哈希使用,开始生成的md5总是和标准的md5 (32位)不同,经过反复测试发现,原来python从文件中按行读取的数据自带了换行符,所以现在需要做的工作就是用空字符替换掉换行符。
#处理大文件,按行进行md5
import hashlib
import os
os.chdir('e:')
Buffsize=1024
count=0
with open("userdata.txt",encoding='utf-8') as a_file:
lines=a_file.readlines(Buffsize)
while lines:
for line in lines:
if line[-1]=='\n':#去掉行尾的换行符
line=line.replace('\n','')
if line[-1]=='\r':#去掉行尾的换行符
line=line.replace('\r','')
count=count+1
print(count+':')
print(line+'\n')
h=hashlib.md5() #创建md5实例
h.update(line.encode(encoding='utf-8'))
hashmd5=h.hexdigest()
#print(hashmd5)
with open('test.txt', mode='a', encoding='utf-8') as testfile:
testfile.write(hashmd5+'\n')
lines=a_file.readlines(Buffsize)
print("finished")
试验证明,减少输出频率可以大幅提高程序执行效率,但缺陷是一旦宕机,可能无法确定文件具体执行到哪一行