0

所以我写了一个二进制文件,我正在尝试获取文件的校验和。我不确定我是否完全理解 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

任何帮助将不胜感激,因为我可能会朝着完全错误的方向前进。

4

1 回答 1

3

错误在于第二次调用open

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

这里,outputFilefile第一次调用的对象open,而不是文件名。这不能与open需要字符串(或 unicode)参数的 一起使用:

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

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

outputFile = open(outputFile, 'wb+')

为了防止这些错误:

  • 避免重新分配给参数变量
  • 使用更好的名称:参数outputFile不应是文件,而是文件名或路径。所以命名它filePath或类似的。
于 2013-10-29T17:11:52.927 回答