write()
とos.write()
の違いは何ですか?
これは、C関数fwrite(3)
とwrite(2)
の違いと似ています。
後者はOSレベルのsystem callの薄いラッパーですが、前者は標準的なCライブラリの一部であり、いくつかの追加のバッファリングを行い、最終的にバッファリングされたデータをfile descriptor。
Python 3.xは、file
オブジェクトのwrite()
メソッドに、Python str
オブジェクトの自動文字エンコード変換を実行するメソッドを追加します。ただし、Python 2.xは追加しません。
また、文字列をUTF-8に手動で変換しただけで、戻り値の違いがありますか?
Python 3.xでは、ファイルを開いた方法との違いが大きくなりました。
ファイルをバイナリモードで開いた場合(例: f = open(filename, 'wb')
の場合f.write()
にはbytes
オブジェクトがあり、バイトのが返されます。
代わりに、テキストモードでファイルを開いたとします。 f = open(filename, 'w')
f.write()
はstr
オブジェクトを想定しており、文字のが返されます。これは、UTF-8などのマルチバイトエンコーディングでは、書き込まれたバイト数と一致しない可能性があります。 os.open()
を呼び出すときos.write()
方法は常にかどうかにかかわらずO_BINARY
フラグ、bytes
オブジェクトを期待
注使用しました。
出典
2016-06-28 19:33:47
Aya
Windows上でファイルがテキストモードで書き込まれている場合、元の文字列に1文字しか含まれていないすべての行で2バイト(cr + lf)が書き込まれます。この場合、 'file.write()'がバイト数を適切に数えていない場合、私はバグだと考えていますが、ファイルが '" wb "'モードで開かれているかどうかを確認することによって問題を解決できます。 – kindall
* text *ファイルに関する他の同様の点: 'tell 'によって返される値はファイル内のバイトインデックスでも文字インデックスでもない**です。それはちょうど「シーク」がその位置に戻るのに使うことができる数字ですが、あなたはそれについて多くを行うべきではありません。 – Bakuriu