2015-05-22 3 views
2

В моем питонном коде, я получаю эту ошибку во время выполнения этой строки.ТипError: должен быть str, а не байтами Ошибка

fo.write(text.replace("'","").encode("utf8")); 

Ошибка:

TypeError: must be str, not bytes 

Он работал отлично с Python 2.7, но с 3, он дает ошибку.

+1

Что такое «текст» –

+0

@kasparg, он тоже не работает. Hitesh Dharamdasani, Это простые текстовые данные. –

ответ

6

В Python 3 файловые объекты, открытые в текстовом режиме, требуют, чтобы вы записали Unicode text.

Вы закодировали свой текст в байтах UTF-8, но объект-файл должен выполнять кодировку. Не кодируйте текст.

Вы можете получить то же поведение в Python 2, используя io.open() function, а не встроенную функцию open(). io модуля в Python 2 является портировать новую инфраструктуру ввода/вывода, используемой в Python 3.

Если вам нужно написать полиглот кода (код Python, который работает как на Python 2 и Python 3), просто импортировать из io :

import io 

with io.open(filename, 'w', encoding='utf8') as fo: 
    fo.write(text.replace("'","")) 

Питон 3 встроенных open() функции точно такие же функции, как io.open().

+0

Если я удаляю кодировку в utf, тогда я получаю эту ошибку 'File 'C: \ Python34 \ lib \ encodings \ cp1252.py", строка 19, в кодировке return codecs.charmap_encode (input, self.errors, encoding_table) [ 0] UnicodeEncodeError: кодек 'charmap' не может кодировать символы в позиции 26-32: chara cter maps to ' –

+0

@bogojane: вам нужно указать правильный кодек при открытии файла. –

+0

Вы можете использовать 'fo = codecs.open (имя файла, 'w', encoding = 'UTF-8')'. Это должно работать с Python 2 и Python 3. – Matthias

Смежные вопросы