read - python modulo io
python: TypeError: no se puede escribir str a secuencia de texto (5)
¿Has intentado escribir una cadena Unicode, en lugar de solo str
? Es decir,
fq.write(u"bingo")
Estoy en Mac OS X, pero cuando traté de escribir un str
, obtuve el error
TypeError: debe ser unicode, no str
Sin embargo, escribir una cadena Unicode funcionó.
Debo estar haciendo algo obviamente mal aquí. Pero, ¿qué es y cómo lo corrijo?
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
editar : en mi aplicación real, no tendré una cadena constante, tendré una cadena regular ... si el problema es Unicode, ¿cómo puedo convertir lo que necesita io.open?
El módulo io
es un módulo python bastante nuevo (introducido en Python 2.6) que facilita el trabajo con archivos Unicode. Su documentación está en: http://docs.python.org/library/io.html
Si solo quiere escribir bytes (tipo "str" de Python 2) en lugar de texto (tipo "unicode" de Python 2), le recomendaría omitir el módulo io
y simplemente usar la función "abrir" incorporada, que da un objeto de archivo que trata con bytes:
>>> f1 = open(''test.txt'',''w'')
O bien, use ''b'' en la cadena de modo para abrir el archivo en modo binario:
>>> f1 = io.open(''test.txt'',''wb'')
Lea los documentos del módulo io para obtener más información: http://docs.python.org/library/io.html
El módulo io difiere del antiguo abierto en que hará una gran diferencia entre los archivos binarios y de texto. Si abre un archivo en modo texto, la lectura devolverá objetos de texto Unicode (llamados unicode
en Python 2 y str
en Python 3) y la escritura requiere que también le proporcione objetos Unicode.
Si abres en modo binario, obtendrás datos secuenciales de 8 bits y eso es lo que debes escribir. En Python 2 usa str
para esto, en Python 3 bytes
.
Está utilizando Python 2 e intentando escribir str en un archivo abierto en modo texto. Eso no funcionará Use Unicode.
f = open("test.txt", "w")
f.write(''bingo'')
f.close()
equivalentemente,
with open("test.txt", "w") as f:
f.write(''bingo'')
y la terminación del bloque cierra el archivo por usted.