textiowrapper read open libreria fileio python io

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.


Tratar:

>>> f1.write(u''bingo'') # u specifies unicode

Referencia


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.