编写二进制文件并获取其校验和

时间:2013-10-29 17:04:00

标签: python hash binary checksum

所以我写了一个二进制文件,我试图得到文件的校验和。我不确定我是否完全理解了hashlib库,或者我是否理解如何实现它。以下是我在Python 2.7中的内容:

def writefile(self, outputFile):
    outputFile = open(outputFile, 'wb+')
    for par in self.fileformat.pList:
        if par.name.lower() in self.calculated.final.keys():
            outputFile.write(self.calculated.final[par.name.lower()])
        else:
            outputFile.write(self.defaults.defaultValues[par.name.upper()])
    outputFile.close()

    with open(outputFile, 'rb') as fh:
        m = hashlib.md5()
        while True:
            data = fh.read(8192)
            if not data:
                break
            m.update(data)
        print m.digest()
    outputFile.close()

我一直得到的是:

TypeError: coercing to Unicode: need string or buffer, file found

任何帮助都会受到赞赏,因为我可能会走向完全错误的方向。

1 个答案:

答案 0 :(得分:3)

错误在于对open的第二次调用:

with open(outputFile, 'rb') as fh:

此处,outputFile是来自第一个file调用的open对象,而不是文件名。这不能与open一起使用,它需要一个字符串(或unicode)参数:

  

TypeError:强制转换为Unicode:需要字符串或缓冲区,找到文件

原点是函数体中的第一行,您可以在其中覆盖参数outputFile

outputFile = open(outputFile, 'wb+')

为了防止这些错误:

  • 避免重新分配参数变量
  • 使用更好的名称:参数outputFile不应该是文件,而是文件名或路径。将其命名为filePath或类似名称。