Abrir archivos en los modos 'rt' y 'wt'

108

Varias veces aquí, en SO, he visto a personas usar modos rty wtpara leer y escribir archivos.

Por ejemplo:

with open('input.txt', 'rt') as input_file:
     with open('output.txt', 'wt') as output_file: 
         ...

No veo los modos documentados , pero dado open()que no arroja un error, parece que su uso es bastante legal.

¿Para qué sirve y hay alguna diferencia entre usar wtvs wy rtvs r?

Alecxe
fuente

Respuestas:

193

tse refiere al modo de texto. No hay ninguna diferencia entre ry rto wy wtdesde el modo de texto es el valor predeterminado.

Documentado aquí :

Character   Meaning
'r'     open for reading (default)
'w'     open for writing, truncating the file first
'x'     open for exclusive creation, failing if the file already exists
'a'     open for writing, appending to the end of the file if it exists
'b'     binary mode
't'     text mode (default)
'+'     open a disk file for updating (reading and writing)
'U'     universal newlines mode (deprecated)

El modo predeterminado es 'r'(abierto para leer texto, sinónimo de 'rt').

devnull
fuente
4
Entendido, está documentado en los documentos de python3. Entonces, básicamente no hay diferencia entre wtvs wy rtvs r- explicit is better than implicit¿ solo ?
alecxe
@alecxe Correcto, dado que el modo de texto es el predeterminado, no hay diferencia entre ry rt...
devnull
9
Tenga en cuenta que wno siempre es igual a wt. Uno de esos casos es gzip.opendonde el modo binario es el predeterminado y no el modo texto. Pregunta relacionada: stackoverflow.com/questions/42013083/…
Carl Ekerot
9

El tindica el modo de texto, lo que significa que\n caracteres se traducirán a las terminaciones de línea del sistema operativo del host al escribir en un archivo y de nuevo al leer. La bandera es básicamente ruido, ya que el modo de texto es el predeterminado.

Aparte de Ueso, esos indicadores de modo provienen directamente de la fopen()función de la biblioteca C estándar , un hecho que se documenta en el sexto párrafo de la documentación de python2 para open().

Hasta donde yo sé, tno es y nunca ha sido parte del estándar C, por lo que aunque muchas implementaciones de la biblioteca C lo aceptan de todos modos, no hay garantía de que todas lo hagan y, por lo tanto, no hay garantía de que funcione en cada compilación de pitón. Eso explica por qué los documentos de python2 no lo enumeraron y por qué en general funcionó de todos modos. Los documentos de python3 lo hacen oficial.

ʇsәɹoɈ
fuente
4

La 'r' es para leer, la 'w' para escribir y la 'a' es para agregar.

La 't' representa el modo de texto en oposición al modo binario.

Varias veces aquí en SO he visto personas que usan los modos rt y wt para leer y escribir archivos.

Editar: ¿Estás seguro de que viste rt y no rb?

Estas funciones generalmente envuelven la función fopen que se describe aquí:

http://www.cplusplus.com/reference/cstdio/fopen/

Como puede ver, menciona el uso de b para abrir el archivo en modo binario.

El enlace del documento que proporcionó también hace referencia a este modo b:

Agregar 'b' es útil incluso en sistemas que no tratan los archivos binarios y de texto de manera diferente, donde sirve como documentación.

jussij
fuente
Sí, fue claramente rt, por ejemplo, stackoverflow.com/questions/10971033/… , o stackoverflow.com/questions/17127853/… etc. Gracias por la información, es bueno saberlo.
alecxe
En el enlace que devnull proporciona, se muestra la opción de texto 't'. Lo que me sorprendió fue que el enlace de C ++ no mencionaba también la opción 't' ya que estoy bastante seguro de que había usado las opciones 'rt' y 'wt' en el código C fopen escrito hace años.
jussij
Sí, por eso lo pregunté, era como una característica no documentada para mí. Espero que el hilo ayude a alguien en el futuro. Gracias de nuevo.
alecxe
3

t indica para text mode

https://docs.python.org/release/3.1.5/library/functions.html#open

en Linux, no hay diferencia entre el modo de texto y el modo binario, sin embargo, en Windows, se convierte \nal \r\nmodo de texto cuando.

http://www.cygwin.com/cygwin-ug-net/using-textbinary.html

ymonad
fuente
5
En Python 3 hay una diferencia adicional entre los modos de archivo de texto y binario (en todas las plataformas). En modo texto, readdevuelve cadenas Unicode. En modo binario, readdevuelve una bytesinstancia. Si desea escribir código Python 2 teniendo en cuenta la compatibilidad con versiones posteriores, puede usar en io.openlugar del estándar openpara obtener el comportamiento de Python 3 (con instancias unicodeversus str).
Blckknght