Dosyaları 'rt' ve 'wt' modlarında açın


109

SO'da birkaç kez dosya okumak ve yazmak için rtve wtmodları kullanan insanlar gördüm .

Örneğin:

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

Belgelenen modları görmüyorum , ancak open()bir hata yapmadığından - kullanımı oldukça yasal gibi görünüyor.

Ne işe wtyarar wve rtvs ile vs kullanmak arasında bir fark var rmı?

Yanıtlar:


194

tmetin modunu ifade eder. Metin modu varsayılan olduğundan rve rtveya wve arasında hiçbir fark yoktur wt.

Burada belgelenmiştir :

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)

Varsayılan mod 'r'(metin okumak için açık, eşanlamlısı 'rt') şeklindedir.


4
Yakaladım, python3 belgelerinde belgelenmiştir. Yani, temelde wtvs wve rtvs arasında bir fark yok r- sadece explicit is better than implicit?
alecxe

Metin modu, varsayılan olduğundan @alecxe Sağ, arasında hiçbir fark yoktur rve rt...
devnull

9
Bunun wher zaman eşit olmadığını unutmayın wt. Böyle bir durum, gzip.openikili modun varsayılan olduğu ve metin modunun olmadığı durumdur. İlgili soru: stackoverflow.com/questions/42013083/…
Carl Ekerot

9

tYani metin modunu belirtir \nokurken karakterlerin tekrar bir dosyaya yazarken bilgisayar OS satır sonları tercüme ve edilecektir. Metin modu varsayılan olduğundan bayrak temelde sadece parazittir.

Dışında U, bu mod bayrakları standart C kütüphanesinin doğrudan gelir fopen()fonksiyonu, altıncı paragrafında belgelenmiştir bir gerçeği python2 belgelerine için open().

Bildiğim kadarıyla t, C standardının bir parçası değildir ve hiçbir zaman olmamıştır, bu yüzden C kütüphanesinin birçok uygulaması yine de kabul etse de, hepsinin kabul edeceğine dair bir garanti yoktur ve bu nedenle her yapısında çalışacağının garantisi yoktur. python. Bu, python2 belgelerinin neden onu listelemediğini ve neden genel olarak işe yaradığını açıklıyor. Python3 dokümanlar Resmi hale.


4

'R' okumak içindir, 'w' yazmak için ve 'a' eklemek içindir.

'T', ikili moda göre metin modunu temsil eder.

SO'da birkaç kez dosya okumak ve yazmak için rt ve wt modlarını kullanan insanlar gördüm.

Düzenleme: rb'yi değil, rt'yi gördüğünüzden emin misiniz?

Bu işlevler genellikle burada açıklanan fopen işlevini sarar :

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

Gördüğünüz gibi, dosyayı ikili modda açmak için b'nin kullanılmasından bahsediyor.

Sağladığınız belge bağlantısı bu b moduna da başvurur:

'B' eklemek, ikili ve metin dosyalarını farklı şekilde ele almayan, dokümantasyon işlevi gördüğü sistemlerde bile yararlıdır.


Evet, açıkça öyleydi rt, örneğin stackoverflow.com/questions/10971033/… veya stackoverflow.com/questions/17127853/… vb. Bilgi için teşekkür ederim, bilmekte fayda var.
alecxe

Devnull'un sağladığı bağlantıda 't' metin seçeneği listelenir. Beni şaşırtan şey, C ++ bağlantısının, yıllar önce yazılmış C fopen kodunda 'rt' ve 'wt' seçeneklerini kullandığımdan oldukça emin olduğumdan 't' seçeneğinden bahsetmemesiydi.
jussij

Evet, bu yüzden sordum - bu benim için belgelenmemiş bir özellik gibiydi. Umarım iş parçacığı gelecekte birine yardımcı olur. Tekrar teşekkürler.
alecxe

3

t gösterir text mode

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

linux üzerinde, metin modunda ve ikili mod arasında hiçbir fark yoktur, ancak, pencerelerde, onlar dönüştürür \niçin \r\nzaman metin modu.

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


5
Python 3'te metin ve ikili dosya modları arasında ek bir fark vardır (tüm platformlarda). Metin modunda, readUnicode dizelerini döndürür. İkili modda readbir bytesörnek döndürür . Python 2 kodunu ileriye dönük uyumluluğu göz önünde bulundurarak yazmak istiyorsanız , Python 3 davranışını ( örneklere karşı ) elde etmek io.openiçin standart yerine kullanabilirsiniz . openunicodestr
Blckknght
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.