TypeError: 'str' does not support the buffer interface
You're using Python 3, where there is a strict division between text (str
) and data (bytes
). Text can't be written to a file if you don't explicitly encode it first.
There are two ways to do this:
1) Open the file in text mode (possibly with an encoding specified) so that strings are automatically encoded for you:
with open("lt.txt", 'at', encoding='utf8') as outfile:
outfile.write(hash_digest + '\n') # or print(hash_digest, file=outfile)
If you don't specify the encoding yourself when opening the file in text mode, the default encoding of your system locale would be used.
2) Encode the strings manually like you tried. But don't try to mix str
with bytes
like you did, either use a byte literal:
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
or encode after adding the newline:
outfile.write((hash_digest + '\n').encode('utf-8'))
![Sankalp](https://i.stack.imgur.com/rdoDS.jpg?s=256&g=1)
Comments
-
Sankalp over 3 years
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
How do I correct that and what do I need to learn to see me through these situations?
Also if I encode this in utf-8(uncomment) it gives out the following error:
TypeError: can't concat bytes to str
-
DSM almost 13 yearsYou don't need to call f.close() if you're using with-open-as. (Of course I realize you were simply matching the OP's code.)
-
Grzegorz Wierzowiecki over 12 yearsThanks ! I had problem with
csv.writer
,writer.writerow
with same error. I've encountered problems adter switching from sys.stdout to fileopen()
. Your solution solved my problems :).