Python: TypeError: не удается записать str в текстовый поток
Я должен делать что-то явно не так. Но что это такое и как я могу исправить?
Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import io
>>> f1 = io.open('test.txt','w')
>>> f1.write('bingo')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\appl\python\2.6.5\lib\io.py", line 1500, in write
s.__class__.__name__)
TypeError: can't write str to text stream
edit. В моем реальном приложении у меня не будет постоянной строки, у меня будет регулярная строка... если unicode - проблема, как мне преобразовать в то, что io. open требуется?
Ответы
Ответ 1
Модуль io
представляет собой довольно новый модуль python (представленный в Python 2.6), что упрощает работу с файлами в формате unicode. Его документация находится по адресу: http://docs.python.org/library/io.html
Если вы просто хотите писать байты (тип Python 2 "str" ) в отличие от текста (тип "Юникод" Python 2), я бы рекомендовал вам либо пропустить модуль io
, и просто использовать встроенный "открытая" функция, которая дает объект файла, который имеет дело с байтами:
>>> f1 = open('test.txt','w')
Или, используйте 'b' в строке режима, чтобы открыть файл в двоичном режиме:
>>> f1 = io.open('test.txt','wb')
Подробнее читайте документы для модуля io: http://docs.python.org/library/io.html
Ответ 2
Попробуйте:
>>> f1.write(u'bingo') # u specifies unicode
Ссылка
Ответ 3
Пробовали ли вы писать строку Unicode, а не только str
? То есть.
fq.write(u"bingo")
Я нахожусь в Mac OS X, но когда я попытался написать str
, я получил ошибку
TypeError: должен быть unicode, а не str
Написание строки Unicode работало, однако.
Ответ 4
f = open("test.txt", "w")
f.write('bingo')
f.close()
эквивалентно,
with open("test.txt", "w") as f:
f.write('bingo')
и завершение блока закрывает файл для вас.
Ответ 5
Модуль io отличается от старого открытого тем, что он будет иметь большое значение между двоичными и текстовыми файлами. Если вы откроете файл в текстовом режиме, чтение вернет текстовые объекты Unicode (называемые unicode
в Python 2 и str
в Python 3), и для записи требуется, чтобы вы также передавали объекты unicode.
Если вы откроете в двоичном режиме, вы получите 8-битные последовательные данные и это то, что вам нужно написать. В Python 2 для этого используется str
, в Python 3 bytes
.
Вы используете Python 2 и пытаетесь записать str в файл, открытый в текстовом режиме. Это не сработает. Используйте Unicode.