Buka file dalam mode 'rt' dan 'wt'

108

Beberapa kali di sini di SO saya telah melihat orang menggunakan rtdan wtmode untuk membaca dan menulis file.

Sebagai contoh:

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

Saya tidak melihat mode tersebut didokumentasikan , tetapi karena open()tidak menimbulkan kesalahan - sepertinya cukup legal untuk digunakan.

Untuk apa dan apakah ada perbedaan antara menggunakan wtvs wdan rtvs r?

alecxe
sumber

Jawaban:

193

tmengacu pada mode teks. Tidak ada perbedaan antara rdan rtatau wdan wtkarena mode teks adalah defaultnya.

Didokumentasikan di sini :

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)

Mode defaultnya adalah 'r'(terbuka untuk membaca teks, sinonim dari 'rt').

devnull
sumber
4
Gotcha, ini didokumentasikan dalam dokumen python3. Jadi, pada dasarnya tidak ada perbedaan antara wtvs wdan rtvs r- hanya explicit is better than implicit?
alecxe
@alecxe Benar, karena mode teks adalah default, tidak ada perbedaan antara rdan rt...
devnull
9
Perhatikan bahwa wtidak selalu sama dengan wt. Salah satu kasusnya adalah di gzip.openmana mode biner adalah default, dan bukan mode teks. Pertanyaan terkait: stackoverflow.com/questions/42013083/…
Carl Ekerot
9

The tmenunjukkan mode teks, yang berarti bahwa\n karakter akan diterjemahkan ke akhir baris tuan OS saat menulis ke file, dan kembali lagi ketika membaca. Bendera pada dasarnya hanya berupa noise, karena mode teks adalah defaultnya.

Selain itu U, flag mode tersebut datang langsung dari fopen()fungsi library C standar , sebuah fakta yang didokumentasikan di paragraf keenam dokumentasi python2 untuk open().

Sejauh yang saya tahu, tbukan dan tidak pernah menjadi bagian dari standar C, jadi meskipun banyak implementasi pustaka C menerimanya, tidak ada jaminan bahwa mereka semua akan, dan oleh karena itu tidak ada jaminan bahwa itu akan berfungsi pada setiap build python. Itu menjelaskan mengapa dokumen python2 tidak mencantumkannya, dan mengapa secara umum tetap berfungsi. Dokumen python3 membuatnya resmi.

ʇsәɹoɈ
sumber
4

'R' untuk membaca, 'w' untuk menulis dan 'a' untuk menambahkan.

'T' mewakili mode teks yang digunakan untuk mode biner.

Beberapa kali di SO saya telah melihat orang menggunakan mode rt dan wt untuk membaca dan menulis file.

Sunting: Apakah Anda yakin Anda melihat rt dan bukan rb?

Fungsi ini umumnya membungkus fungsi fopen yang dijelaskan di sini:

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

Seperti yang Anda lihat, ini menyebutkan penggunaan b untuk membuka file dalam mode biner.

Tautan dokumen yang Anda berikan juga mengacu pada mode b ini:

Menambahkan 'b' berguna bahkan pada sistem yang tidak memperlakukan file biner dan teks secara berbeda, yang berfungsi sebagai dokumentasi.

jussij
sumber
Ya, jelas sekali rt, misalnya stackoverflow.com/questions/10971033/… , atau stackoverflow.com/questions/17127853/… dll. Terima kasih atas infonya, senang mengetahuinya.
alecxe
Di tautan yang devnull menyediakan opsi teks 't' terdaftar. Yang mengejutkan saya adalah tautan C ++ tidak juga menyebutkan opsi 't' karena saya cukup yakin saya telah menggunakan opsi 'rt' dan 'wt' dalam kode C fopen yang ditulis bertahun-tahun yang lalu.
jussij
Ya, itulah mengapa saya bertanya - itu seperti fitur yang tidak terdokumentasi bagi saya. Semoga utas ini akan membantu seseorang di masa depan. Terima kasih lagi.
alecxe
3

t menunjukkan untuk text mode

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

di linux, tidak ada perbedaan antara mode teks dan mode biner, namun, di windows, mode ini diubah \nmenjadi \r\nmode teks.

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

ymonad
sumber
5
Di Python 3 ada perbedaan tambahan antara mode file teks dan biner (di semua platform). Dalam mode teks, readmengembalikan string Unicode. Dalam mode biner, readmengembalikan sebuah bytesinstance. Jika Anda ingin menulis kode Python 2 dengan kompatibilitas ke depan, Anda dapat menggunakan io.opendaripada standar openuntuk mendapatkan perilaku Python 3 (dengan unicodeversus strinstance).
Blckknght