home changes contents help options

164:ファイルにバイナリモードで書き込む

バイナリモード

OS によっては自身の改行文字(たとえば Windows ならば \r\n(CRLF))と \n とをファイルの読み書き時に相互変換する機能があります。このおかげで C コードや Python コードを書く際には改行文字を n として扱うことができるようになっています。しかしこの機能が不要となる場合も多々あります。この変換を無効にするにはバイナリモードでファイルを開くようにします。

ファイルをバイナリモードで開くには open 関数の引数に "b" を加えます。

>>> f = open('out.txt', 'wb') # バイナリモードで書き込み用にファイルを開く
>>> f.write('Hello, world\n') # \n (LF)で保存される
>>> f.close()
>>>
>>> f = open('out.txt', 'rb') # バイナリモードで読み込み用にファイルを開く
>>> f.read() # 変換なしで読み出される
'Hello, world\n'
>>> f.close()

なお、改行、 \n の相互変換を行うモードはテキストモードといいます。

>>> f = open('out.txt', 'w') # テキストモードで書き込み用にファイルを開く
>>> f.write('Hello, world\n') # 実行環境の改行文字で保存される
>>> f.close()
>>>
>>> f = open('out.txt', 'r') # テキストモードで読み込み用にファイルを開く
>>> f.read() # 読み出し時には改行文字は \n になる
'Hello, world\n'
>>> f.close()
>>>
>>> f = open('out.txt', 'rb') # (Windows 上にて)バイナリモードで開きなおしてみた
>>> f.read() # 末尾が \r\n になっていることが分かる
'Hello, world\r\n'