Öffnen Sie Dateien in den Modi 'rt' und 'wt'

108

Mehrmals hier auf SO habe ich Leute gesehen, die rtund wtModi zum Lesen und Schreiben von Dateien verwenden.

Beispielsweise:

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

Ich sehe die dokumentierten Modi nicht , aber da open()sie keinen Fehler auslösen , scheint es ziemlich legal zu sein, sie zu verwenden.

Wofür ist es und gibt es einen Unterschied zwischen der Verwendung von wtvs wund rtvs r?

Alecxe
quelle

Antworten:

193

tbezieht sich auf den Textmodus. Es gibt keinen Unterschied zwischen rund rtund wund, wtda der Textmodus die Standardeinstellung ist.

Dokumentierte hier :

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)

Der Standardmodus ist 'r'(zum Lesen von Text geöffnet, Synonym für 'rt').

devnull
quelle
4
Gotcha, es ist in Python3-Dokumenten dokumentiert. Es gibt also grundsätzlich keinen Unterschied zwischen wtvs wund rtvs r- nur explicit is better than implicit?
Alecxe
@alecxe Richtig, da der Textmodus die Standardeinstellung ist, gibt es keinen Unterschied zwischen rund rt...
devnull
9
Beachten Sie, dass dies wnicht immer gleich ist wt. In einem solchen Fall ist der gzip.openBinärmodus der Standardmodus und nicht der Textmodus. Verwandte Frage: stackoverflow.com/questions/42013083/…
Carl Ekerot
9

Der tTextmodus wird angezeigt. Dies bedeutet, dass \nZeichen beim Schreiben in eine Datei in die Zeilenenden des Host-Betriebssystems und beim Lesen wieder zurück übersetzt werden. Das Flag ist im Grunde nur Rauschen, da der Textmodus die Standardeinstellung ist.

Anders als U, kommen diese Modus - Flags direkt von dem Standard der C - Library - fopen()Funktion, eine Tatsache , die im sechsten Absatz der dokumentierten python2 Dokumentation für open().

Soweit ich weiß, tist und war es nie Teil des C-Standards. Obwohl viele Implementierungen der C-Bibliothek dies ohnehin akzeptieren, gibt es keine Garantie dafür, dass sie alle funktionieren, und daher keine Garantie dafür, dass es bei jedem Build von funktioniert Python. Das erklärt, warum die python2-Dokumente es nicht aufgelistet haben und warum es im Allgemeinen sowieso funktioniert hat. Die Python3-Dokumente machen es offiziell.

ʇSәɹoɈ
quelle
4

Das 'r' steht zum Lesen, das 'w' zum Schreiben und das 'a' zum Anhängen.

Das 't' steht für den Textmodus im Binärmodus.

Mehrmals hier auf SO habe ich Leute gesehen, die RT- und WT-Modi zum Lesen und Schreiben von Dateien verwenden.

Edit: Bist du sicher, dass du rt und nicht rb gesehen hast?

Diese Funktionen schließen im Allgemeinen die hier beschriebene fopen- Funktion ein:

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

Wie Sie sehen können, wird die Verwendung von b zum Öffnen der Datei im Binärmodus erwähnt.

Der von Ihnen angegebene Dokumentlink verweist auch auf diesen b-Modus:

Das Anhängen von 'b' ist auch auf Systemen nützlich, die Binär- und Textdateien nicht unterschiedlich behandeln und als Dokumentation dienen.

jussij
quelle
Ja, es war klar rt, zB stackoverflow.com/questions/10971033/… oder stackoverflow.com/questions/17127853/… usw. Vielen Dank für die Info, gut zu wissen.
Alecxe
In dem Link, den devnull bereitstellt, ist die Textoption 't' aufgeführt. Was mich überraschte, war, dass der C ++ - Link diese Option 't' nicht erwähnte, da ich ziemlich sicher bin, dass ich die Optionen 'rt' und 'wt' in C fopen-Code verwendet habe, der vor Jahren geschrieben wurde.
Jussij
Ja, deshalb habe ich gefragt - es war für mich wie eine nicht dokumentierte Funktion. Hoffe der Thread würde jemandem in Zukunft helfen. Danke noch einmal.
Alecxe
3

t zeigt für text mode

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

Unter Linux gibt es keinen Unterschied zwischen Textmodus und Binär - Modus, jedoch in den Fenstern, wandelt sie \num , \r\nwenn Textmodus.

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

Ymonad
quelle
5
In Python 3 gibt es einen zusätzlichen Unterschied zwischen Text- und Binärdateimodi (auf allen Plattformen). Gibt im Textmodus readUnicode-Zeichenfolgen zurück. Gibt im Binärmodus readeine bytesInstanz zurück. Wenn Sie Python 2-Code unter Berücksichtigung der Vorwärtskompatibilität schreiben möchten, können Sie io.openanstelle des Standards opendas Python 3-Verhalten (mit unicodeversus strInstanzen) verwenden.
Blckknght