pythonソースコードで、次のような文字列の前に小さなbを見つけました。
b"abcdef"
uUnicode文字列を表すrプレフィックスと、生の文字列リテラルのプレフィックスについて知っています。
bプレフィックスのないプレーンな文字列のように見えるので、何の略で、どのようなソースコードが便利ですか?
pythonソースコードで、次のような文字列の前に小さなbを見つけました。
b"abcdef"
uUnicode文字列を表すrプレフィックスと、生の文字列リテラルのプレフィックスについて知っています。
bプレフィックスのないプレーンな文字列のように見えるので、何の略で、どのようなソースコードが便利ですか?
回答:
これはPython3 bytes リテラルです。このプレフィックスはPython 2.5以前にはありません(2.xのプレーン文字列に相当しますが、3.xのプレーン文字列はu2.xのプレフィックス付きのリテラルに相当します)。Python 2.6以降では、3.xとの互換性のために、プレーンな文字列と同等です。
bプレフィックスは意味bytesの文字列リテラルを。
Python 3のソースコードで使用されている場合、式は通常のUnicode オブジェクトではなくbytesオブジェクトを作成します。Pythonシェル、またはリスト、辞書、その他のコンテナコンテンツの一部としてエコーされている場合、この表記法を使用して表されているオブジェクトが表示されます。strbytes
bytesオブジェクトには基本的に0〜255の範囲の整数のシーケンスが含まれますが、Pythonは、これらのバイトをASCIIコードポイントとして表示して、内容を読みやすくします。外部任意のバイトの印刷可能な ASCII文字の範囲は、エスケープシーケンス(例えば、として示されている\n、\x82など)。逆に、ASCII文字とエスケープシーケンスの両方を使用してバイト値を定義できます。ASCII値には数値が使用されます(例b'A'== b'\x41')
bytesオブジェクトは整数のシーケンスで構成されるため、bytesリストのように、0〜255の範囲の値を持つ整数の他のシーケンスからオブジェクトを構築できます。
bytes([72, 101, 108, 108, 111])
そして、インデックスは、あなたが整数をバックアップできます(ただし、スライシングは、新しい生産bytes値を、上記の例のために、value[0]あなたを与える72が、value[:1]あるb'H'72は大文字のASCIIコード・ポイントであるとして、Hが)。
bytesエンコードされたテキストを含むモデルのバイナリデータ。値にテキストが含まれている場合は、まず正しいコーデックを使用してそれをデコードする必要があります。たとえば、データがUTF-8としてエンコードされている場合、次のようにしてUnicode 値を取得できます。bytesstr
strvalue = bytesvalue.decode('utf-8')
逆に、strオブジェクト内のテキストbytesからエンコードするには、をエンコードする必要があります。使用するエンコーディングを決定する必要があります。デフォルトではUTF-8を使用しますが、必要なものはユースケースに大きく依存します。
bytesvalue = strvalue.encode('utf-8')
コンストラクタを使用bytes(strvalue, encoding)して同じことを行うこともできます。
デコード方法とエンコード方法はどちらも、エラーの処理方法を指定する追加の引数を取ります。
Python 2、バージョン2.6および2.7 b'..'では、文字列リテラル構文を使用した文字列リテラルの作成もサポートされているため、Python 2と3の両方で機能するコードを簡単にすることができます。
bytesオブジェクトはstr文字列と同じように不変です。変更可能なバイト値が必要な場合は、bytearray()オブジェクトを使用します。