Ответ 1
Исправление было простым для меня
Используйте
f = open('bytes.bin', 'w')
вместо
f = open('bytes.bin', 'wb')
В python 3 'w'
это то, что вам нужно, а не 'wb'
.
Привет, эти две функции в Py2 отлично работают, но он не работает на Py3
def encoding(text, codes):
binary = ''
f = open('bytes.bin', 'wb')
for c in text:
binary += codes[c]
f.write('%s' % binary)
print('Text in binary:', binary)
f.close()
return len(binary)
def decoding(codes, large):
f = file('bytes.bin', 'rb')
bits = f.read(large)
tmp = ''
decode_text = ''
for bit in bits:
tmp += bit
if tmp in fordecodes:
decode_text += fordecodes[tmp]
tmp = ''
f.close()
return decode_text
Консоль выдает следующее:
Traceback (most recent call last):
File "Practica2.py", line 83, in <module>
large = encoding(text, codes)
File "Practica2.py", line 56, in encoding
f.write('%s' % binary)
TypeError: 'str' does not support the buffer interface
Исправление было простым для меня
Используйте
f = open('bytes.bin', 'w')
вместо
f = open('bytes.bin', 'wb')
В python 3 'w'
это то, что вам нужно, а не 'wb'
.
В Python 2 голое строковые строки (например, 'string'
) - это байты, тогда как в Python 3 они являются unicode. Это означает, что если вы хотите, чтобы буквальные строки обрабатывались как байты в Python 3, вы всегда должны явно отмечать их как таковые.
Итак, например, первые несколько строк функции encoding
должны выглядеть следующим образом:
binary = b''
f = open('bytes.bin', 'wb')
for c in text:
binary += codes[c]
f.write(b'%s' % binary)
и в другой функции есть несколько строк, которые нуждаются в подобной обработке.
Подробнее см. Портирование на Python 3 и раздел Bytes, Strings и Unicode.