Apri i file in modalità "rt" e "wt"


108

Diverse volte qui su SO ho visto persone che usano le modalità rte wtper leggere e scrivere file.

Per esempio:

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

Non vedo le modalità documentate , ma poiché open()non genera un errore, sembra che sia praticamente legale da usare.

A cosa serve e c'è qualche differenza tra l'utilizzo di wtvs we rtvs r?

Risposte:


193

tsi riferisce alla modalità testo. Non c'è differenza tra re rto we wtpoiché la modalità testo è l'impostazione predefinita.

Documentato qui :

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)

La modalità predefinita è 'r'(aperto per la lettura del testo, sinonimo di 'rt').


4
Gotcha, è documentato nei documenti di python3. Quindi, praticamente non c'è differenza tra wtvs we rtvs r- solo explicit is better than implicit?
alecxe

@alecxe Giusto, poiché la modalità testo è l'impostazione predefinita, non c'è differenza tra re rt...
devnull

9
Nota che wnon è sempre uguale a wt. Uno di questi casi è gzip.opendove la modalità binaria è l'impostazione predefinita e non la modalità testo. Domanda correlata: stackoverflow.com/questions/42013083/…
Carl Ekerot

9

Il tindica la modalità di testo, il che significa che\n i personaggi saranno tradotti per la fine riga sistema operativo host quando si scrive in un file, e poi di nuovo durante la lettura. La bandiera è fondamentalmente solo rumore, poiché la modalità testo è l'impostazione predefinita.

Oltre a ciò U, quei flag di modalità provengono direttamente dalla fopen()funzione della libreria C standard , un fatto che è documentato nel sesto paragrafo della documentazione di python2 per open().

Per quanto ne so, tnon fa e non è mai stato parte dello standard C, quindi sebbene molte implementazioni della libreria C lo accettino comunque, non c'è garanzia che lo faranno tutte, e quindi nessuna garanzia che funzionerà su ogni build di pitone. Questo spiega perché i documenti di python2 non lo elencano e perché in genere ha funzionato comunque. I documenti di python3 lo rendono ufficiale.


4

La "r" sta per leggere, "w" per scrivere e "a" per aggiungere.

La "t" rappresenta la modalità di testo rispetto alla modalità binaria.

Diverse volte qui su SO ho visto persone che usano le modalità rt e wt per leggere e scrivere file.

Modifica: sei sicuro di aver visto rt e non rb?

Queste funzioni generalmente racchiudono la funzione fopen che è descritta qui:

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

Come puoi vedere menziona l'uso di b per aprire il file in modalità binaria.

Anche il collegamento al documento che hai fornito fa riferimento a questa modalità b:

L'aggiunta di "b" è utile anche su sistemi che non trattano i file binari e di testo in modo diverso, dove serve come documentazione.


Sì, era chiaramente rt, ad esempio stackoverflow.com/questions/10971033/… , o stackoverflow.com/questions/17127853/… ecc. Grazie per le informazioni, buono a sapersi.
alecxe

Nel collegamento fornito da devnull è elencata l'opzione di testo "t". Ciò che mi ha sorpreso è stato che il collegamento C ++ non menzionava anche l'opzione "t" poiché sono abbastanza sicuro di aver usato le opzioni "rt" e "wt" nel codice C fopen scritto anni fa.
jussij

Sì, è per questo che l'ho chiesto: per me era come una funzionalità non documentata. Spero che il thread possa aiutare qualcuno in futuro. Grazie ancora.
alecxe

3

t indica per text mode

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

su Linux, non c'è differenza tra la modalità testo e la modalità binaria, tuttavia, in Windows, si convertono \nin \r\nquando modalità testo.

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


5
In Python 3 c'è un'ulteriore differenza tra le modalità di file binario e di testo (su tutte le piattaforme). In modalità testo, readrestituisce stringhe Unicode. In modalità binaria, readrestituisce bytesun'istanza. Se vuoi scrivere codice Python 2 tenendo a mente la compatibilità con le versioni precedenti, puoi usare io.openinvece dello standard openper ottenere il comportamento di Python 3 (con le istanze unicoderispetto a str).
Blckknght
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.