「rt」および「wt」モードでファイルを開く


108

ここSOで何度か、ファイルの読み取りと書き込みにrtwtモードを使用している人を見てきました。

例えば:

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

私はモードが表示されていない文書が、以降はopen()エラーをスローしません-ルックスを、それが使用する法的ほとんどだよう。

それは何のためであり、wtvs wrtvsの使用には違いがありますrか?

回答:


193

tテキストモードを指します。テキストモードがデフォルトであるため、rand rtまたはwandの間に違いはありませんwt

文書化され、ここで

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)

デフォルトのモードは'r'(テキストを読むために開く、の同義語'rt')です。


4
わかりました、それはpython3ドキュメントに記載されています。したがって、基本的にwtvs wrtvsの間に違いはありませんr-ただexplicit is better than implicit
alecxe

テキストモードがデフォルトであるため@alecxe右は、差がないrrt...
devnull

9
wは常にと等しいとは限らないことに注意してくださいwt。このようなケースの1つはgzip.open、バイナリモードがデフォルトであり、テキストモードではない場合です。関連質問:stackoverflow.com/questions/42013083/...
カールEkerot

9

tつまり、テキストモードを示して\n文字がファイルへの書き込み時に、ホストOSの改行コードに変換し、再び読み込むときにされます。テキストモードがデフォルトであるため、フラグは基本的に単なるノイズです。

以外にU、これらのモードフラグは標準Cライブラリのfopen()関数から直接取得さopen()ます。これは、のpython2ドキュメントの 6番目の段落に記載されています。

私の知る限り、tはC標準の一部ではありませんでした。そのため、Cライブラリの多くの実装はそれを受け入れますが、すべてが保証されるわけではないため、すべてのビルドで機能する保証はありません。 python。それがpython2のドキュメントにリストされなかった理由と、それが一般的に機能した理由を説明しています。python3のドキュメントは、それが公式にします。


4

「r」は読み取り用、「w」は書き込み用、「a」は追加用です。

「t」は、バイナリモードに相当するテキストモードを表します。

ここSOで何度か、rtモードとwtモードを使用してファイルの読み取りと書き込みを行う人を見てきました。

編集: rbではなくrtを見たことはありますか?

これらの関数は、通常、ここで説明するfopen関数をラップします。

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

ご覧のとおり、bを使用してファイルをバイナリモードで開くことが記載されています。

あなたが提供したドキュメントのリンクもこのbモードを参照しています:

「b」を付加すると、ドキュメントとして機能するバイナリファイルとテキストファイルを別々に処理しないシステムでも役立ちます。


ええ、それは明らかにrt、例えば、stackoverflow.com / questions / 10971033 / … 、またはstackoverflow.com/questions/17127853/…などでした。情報をありがとうございます。
alecxe

devnullが提供するリンクには、「t」テキストオプションがリストされています。私を驚かせたのは、C ++リンクが「t」オプションについても言及していなかったことでした。何年も前に書かれたC fopenコードで「rt」オプションと「wt」オプションを使用したことは確かです。
jussij

ええ、それが私が尋ねた理由です-それは私にとって文書化されていない機能のようでした。スレッドが将来誰かを助けることを願っています。再度、感謝します。
alecxe 2014

3

t を示す text mode

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

Linuxでは、テキストモードとバイナリモードに違いはありませんが、Windowsでは、いつテキストモードに変換さ\n\r\nます。

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


5
Python 3では、(すべてのプラットフォームで)テキストモードとバイナリファイルモードの間に追加の違いがあります。テキストモードでreadは、Unicode文字列を返します。バイナリモードでreadは、bytesインスタンスを返します。上位互換性を考慮してPython 2コードを記述したい場合io.openは、標準ではなくを使用openして、Python 3の動作(インスタンスとのunicode比較str)を取得できます。
Blckknght 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.