所以我写了一个二进制文件,我试图得到文件的校验和。我不确定我是否完全理解了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
任何帮助都会受到赞赏,因为我可能会走向完全错误的方向。
答案 0 :(得分:3)
错误在于对open
的第二次调用:
with open(outputFile, 'rb') as fh:
此处,outputFile
是来自第一个file
调用的open
对象,而不是文件名。这不能与open
一起使用,它需要一个字符串(或unicode)参数:
TypeError:强制转换为Unicode:需要字符串或缓冲区,找到文件
原点是函数体中的第一行,您可以在其中覆盖参数outputFile
:
outputFile = open(outputFile, 'wb+')
为了防止这些错误:
outputFile
不应该是文件,而是文件名或路径。将其命名为filePath
或类似名称。