Python文字列の前のabプレフィックスは何を意味しますか?


107

pythonソースコードで、次のような文字列の前に小さなbを見つけました。

b"abcdef"

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

bプレフィックスのないプレーンな文字列のように見えるので、何の略で、どのようなソースコードが便利ですか?


10
@SLott:提供されているリンクをたどると、2.6の場合、bプレフィックスは文字列プレフィックスで許可されないことがわかります(参考資料の軽微なエラーのようです)。そして、このようなことについてググるのは簡単ではありません。「b python string prefix」のようなキーワードを試してみましたが、基本的に何も見つかりませんでした。
クリス

使用されているリンクS.Lottにはバージョン指定子がありません。これはPython 3に関するものです:docs.python.org/3/reference/…。プレフィックスはPython 2.6以降でもサポートれ、クロスバージョンのPythonコードを容易にします。
Martijn Pieters

1
この質問は、「完全に重複したもの」でも、「printステートメントでこの「b」文字を削除できますか?」という質問への回答でもありません。 stackoverflow.com/questions/42599851/…マークを外して、マリジンに喜んでもらえますか?質問した人と実際に回答を試みた人は、実際の質問に答えることができることを感謝するかもしれません。
me_ 2017年

回答:


62

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


@WRAR:私がこれを見たpython 2.6コードにあった、それはpython2.6で導入されたようだ
kriss

具体的には、投稿する前に2.6リファレンスで確認しました:docs.python.org/reference/lexical_analysis.html#literals
wRAR

1
「将来の互換性のために、Python 2.6はstr型の同義語としてバイトを追加します。また、「新機能」からb ''表記もサポートします。
wRAR 2010

今ポイントに2.7の参照、およびb接頭辞が追加された上記のリンクとして、ここでは古い偽の参照へのリンクですdocs.python.org/release/2.6.8/reference/...は
KRISS

98

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()オブジェクトを使用します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.