In Python 2.x with 'file-like' object:
sys.stdout.write(bytes_)
tempfile.TemporaryFile().write(bytes_)
open('filename', 'wb').write(bytes_)
StringIO().write(bytes_)
同じことをPython 3?
これと同等の記述方法Python 2.xコード:
def write(file_, bytes_):
file_.write(bytes_)
注意: sys.stdout
は、必ずしも意味的にテキストストリームではありません。場合によってはバイトストリームと見なすことが有益な場合があります。たとえば、 リモートマシンでdir /の暗号化されたアーカイブを作成 :
tar -c dir/ | gzip | gpg -c | ssh user@remote 'dd of=dir.tar.gz.gpg'
この場合、Unicodeを使用しても意味がありません。
それは、文字列ではなくバイトで動作するAPIを使用することの問題です。
sys.stdout.buffer.write(bytes_)
docs で説明されているように、detach
ストリームを使用することもできるため、デフォルトではバイナリになります。
これは、基礎となるバイトバッファーにアクセスします。
tempfile.TemporaryFile().write(bytes_)
これはすでにバイトAPIです。
open('filename', 'wb').write(bytes_)
「b」から予想されるように、これはバイトAPIです。
from io import BytesIO
BytesIO().write(bytes_)
BytesIO
は、StringIO
と同等のバイトです。
編集:write
は、任意のbinaryファイルのようなオブジェクトで動作します。したがって、一般的な解決策は、適切なAPIを見つけることです。
ファイルを開くときに、バイナリモード「b」を指定します。
with open('myfile.txt', 'wb') as w:
w.write(bytes)