Abra arquivos nos modos 'rt' e 'wt'

108

Várias vezes aqui no SO eu vi pessoas usando modos rte wtpara ler e escrever arquivos.

Por exemplo:

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

Não vejo os modos documentados , mas como open()não gera um erro - parece que é legal de usar.

Para que serve e há alguma diferença entre usar wtvs we rtvs r?

Alecxe
fonte

Respostas:

193

trefere-se ao modo de texto. Não há diferença entre re rtou we, wtpois o modo de texto é o padrão.

Documentado aqui :

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)

O modo padrão é 'r'(aberto para leitura de texto, sinônimo de 'rt').

Devnull
fonte
4
Peguei, está documentado na documentação do python3. Então, basicamente não há diferença entre wtvs we rtvs r- apenas explicit is better than implicit?
alecxe de
@alecxe Certo, como o modo de texto é o padrão, não há diferença entre re rt...
devnull
9
Observe que wnem sempre é igual a wt. Um desses casos é gzip.openonde o modo binário é o padrão, e não o modo de texto. Pergunta relacionada: stackoverflow.com/questions/42013083/…
Carl Ekerot
9

O tindica o modo de texto, o que significa que os \ncaracteres serão traduzidos para as terminações de linha do sistema operacional do host ao gravar em um arquivo e de volta ao ler. A bandeira é basicamente apenas ruído, já que o modo de texto é o padrão.

Além disso U, esses sinalizadores de modo vêm diretamente da fopen()função da biblioteca C padrão , um fato documentado no sexto parágrafo da documentação do python2 para open().

Até onde eu sei, tnão é e nunca fez parte do padrão C, então embora muitas implementações da biblioteca C aceitem isso de qualquer maneira, não há garantia de que todas o farão e, portanto, não há garantia de que funcionará em todas as compilações de Pitão. Isso explica por que os documentos do python2 não o listavam e por que geralmente funcionava de qualquer maneira. A documentação do python3 torna isso oficial.

ʇsәɹoɈ
fonte
4

O 'r' é para ler, 'w' para escrever e 'a' é para acrescentar.

O 't' representa o modo de texto em oposição ao modo binário.

Várias vezes aqui no SO eu vi pessoas usando os modos rt e wt para ler e gravar arquivos.

Edit: Tem certeza de que viu rt e não rb?

Essas funções geralmente envolvem a função fopen , que é descrita aqui:

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

Como você pode ver, ele menciona o uso de b para abrir o arquivo em modo binário.

O link do documento fornecido também faz referência a este modo b:

Anexar 'b' é útil mesmo em sistemas que não tratam arquivos binários e de texto de maneira diferente, onde serve como documentação.

Jussij
fonte
Sim, era claro rt, por exemplo, stackoverflow.com/questions/10971033/… ou stackoverflow.com/questions/17127853/… etc. Obrigado pela informação, é bom saber.
alecxe de
No link que o devnull fornece, a opção de texto 't' está listada. O que me surpreendeu foi que o link C ++ também não mencionou a opção 't', pois tenho certeza de que usei as opções 'rt' e 'wt' no código C fopen escrito anos atrás.
jussij
Sim, é por isso que perguntei - era como um recurso não documentado para mim. Espero que o tópico ajude alguém no futuro. Obrigado novamente.
alecxe de
3

t indica para text mode

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

no linux, não há diferença entre o modo texto e o modo binário, porém, no windows, eles convertem \npara o \r\nmodo texto.

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

Ymonad
fonte
5
No Python 3, há uma diferença adicional entre os modos de arquivo de texto e binário (em todas as plataformas). No modo de texto, readretorna strings Unicode. No modo binário, readretorna uma bytesinstância. Se você deseja escrever o código Python 2 com compatibilidade de encaminhamentos em mente, você pode usar io.openem vez do padrão openpara obter o comportamento do Python 3 (com instâncias unicodeversus str).
Blckknght