web-dev-qa-db-ja.com

a python stringの前のbプレフィックスはどういう意味ですか?

pythonソースコードでつまずいたのは、次のような文字列の前に小さなbがあることです。

b"abcdef"

Unicode文字列を表すuプレフィックスと、生の文字列リテラルのrプレフィックスについて知っています。

bは何を表し、どの種類のソースコードで有用なのですか?プレフィックスのないプレーンな文字列とまったく同じように見えるためです。

94
kriss

これはPython3 bytesリテラル です。このプレフィックスはPython 2.5以前では存在しません(2.xのプレーンストリングに相当しますが、3.xのプレーンストリングはuのリテラルに相当します2.xのプレフィックス)Python 2.6+では、プレーン文字列 .xとの互換性のため と同等です。

60
wRAR

bプレフィックスは bytes文字列リテラル を意味します。

Python 3ソースコードで使用される場合、式は bytesオブジェクト を作成します。通常の nicode str object 。Python Shellまたはリスト、dict、または他のコンテナの内容の一部としてエコー表示される場合、bytesオブジェクトが表示されます。この表記を使用して表されます。

bytesオブジェクトには基本的に0〜255の範囲の整数のシーケンスが含まれますが、表現される場合、PythonはこれらのバイトをASCII printableの範囲外のすべてのバイトASCII文字はエスケープシーケンスとして表示されます(例:\n\x82など)。逆に、ASCII文字とエスケープシーケンスの両方を使用して、バイト値を定義できます。ASCII値の値は使用済み(例_b'A' == b'\x41'

bytesオブジェクトは整数のシーケンスで構成されるため、リストのように0〜255の範囲の値を持つ整数の他のシーケンスからbytesオブジェクトを構築できます。

bytes([72, 101, 108, 108, 111])

インデックスを作成すると、整数が返されます(ただし、スライスすると新しいbytes値が生成されます。上記の例では、value[1]101を返しますが、72はASCIIコードであるため、value[:1]b'H'です大文字のポイント[〜#〜] h [〜#〜])。

bytes modelバイナリデータエンコードされたテキストを含む。 bytes値にテキストが含まれている場合は、正しいコーデックを使用して最初にデコードする必要があります。たとえば、データがUTF-8としてエンコードされている場合、以下を使用してUnicode str値を取得できます。

strvalue = bytesvalue.decode('utf-8')

逆に、strオブジェクトのテキストからbytesに移動するには、encodeが必要です。使用するエンコーディングを決定する必要があります。デフォルトではUTF-8を使用しますが、必要なものはユースケースに大きく依存します。

bytesvalue = strvalue.encode('utf-8')

コンストラクタbytes(strvalue, encoding)を使用して同じことを行うこともできます。

デコードとエンコードの両方のメソッドは エラーの処理方法を指定 に追加の引数を取ります。

Python 2バージョン2.6および2.7は、b'..'文字列リテラル構文を使用した文字列リテラルの作成もサポートしており、Python 2と3の両方で機能するコードを容易にします。

bytes文字列がそうであるように、strオブジェクトは不変です。可変バイト値が必要な場合は、 bytearray() object を使用します。

80
Martijn Pieters