TypeError:'str'不支持缓冲区接口

时间:2011-08-21 15:37:01

标签: python file-io md5

import hashlib

infile = open("P:\\r.mp3", 'r+b')
data = infile.readline()
hash = hashlib.md5()
hash.update(data)

hash_digest = hash.hexdigest()
print(hash_digest)
#hash_digest = hash_digest.encode('utf-8')
print(hash_digest)
with open("lt.txt", 'ab') as outfile:
    outfile.write(hash_digest + '\n')   #error here

with open("syncDB.txt", 'rb') as fg:
    for data in fg:
    print(data)
outfile.write(hash_digest + '\n')
TypeError: 'str' does not support the buffer interface

如何纠正这一点以及在这些情况下我需要学习什么才能看到我?

如果我在utf-8(取消注释)中对此进行编码,则会发出以下错误:

TypeError: can't concat bytes to str

2 个答案:

答案 0 :(得分:22)

您正在使用Python 3,其中文本(str)和数据(bytes)之间存在严格的划分。如果您没有先对文件进行显式编码,则无法将文本写入文件。

有两种方法可以做到这一点:

1)以文本模式打开文件(可能指定了编码),以便为您自动编码字符串:

with open("lt.txt", 'at', encoding='utf8') as outfile:
    outfile.write(hash_digest + '\n') # or print(hash_digest, file=outfile)

如果在文本模式下打开文件时未自行指定编码,则将使用系统区域设置的默认编码。

2)像您尝试的那样手动编码字符串。但是不要像你一样尝试将strbytes混合使用,要么使用字节文字:

hash_digest = hash_digest.encode('utf-8')
with open("lt.txt", 'ab') as outfile:
    outfile.write(hash_digest + b'\n')   # note the b for bytes

或在添加换行符后进行编码:

    outfile.write((hash_digest + '\n').encode('utf-8'))

答案 1 :(得分:-5)

您必须在Google中搜索'str'不支持缓冲区界面

你会得到很多像这样的答案:

stackoverflow.com/questions/5471158/typeerror-str-does-not-support-the-buffer-interface

对于第二个错误** TypeError:无法将字节连接到str **,我认为你必须在b'\n'

中写下f.write(hex + '\n')

“”“编辑

是的Rosh Oxymoron是对的,b'\ n',而不是你'\ n'