\

Python3では、文字列とバイト列の区別が明確になりました。Python2でバイナリデータを文字列で扱っていたり、strとunicodeの使い分けで混乱していたのがスッキリしたと思いますが、Python2から移行するとちょっと混乱したりするのでまとめて置きます。

bytes型とstr型

Python3のbytes型とstr型の違いを理解することは、Pythonでの文字列操作において重要です。bytes型はバイトの連なりで、ファイルに保存できます。一方、str型は文字の連なりで、ファイル(ハードディスク)に直接保存できません。

エンコーディング

世の中には多くの文字コードが存在していますが、Pythonではstr型の文字列を指定した文字コードのバイトデータに変換することができます。例えば、以下のコードはstr型の文字列をutf-8のバイトデータに変換します。

a = "あい"
a_utf8 = a.encode("utf-8")
print(type(a_utf8))  # => <class 'bytes'>
print(a_utf8)  # => b'\\xe3\\x81\\x82\\xe3\\x81\\x84'

この時点では、bytes型に変換すると、もはやstr型ではないので文字列として扱うことはできなくなります。また、この時点ではint型やfloat型ですらないので注意が必要です。bytes型のデータをstr型やint型、float型として扱うにはそれぞれの型への変換が必要です。

まとめ

Python3では、文字列は全てstr型として扱われ、str型では文字データをutf-8で扱います。どのような文字コードのテキストファイルでもPythonで扱うにはstr型 (utf-8)に変換する必要があります。Pythonで文字列の取り扱いを理解するのに必要なのがbytes型と呼ばれる組み込み型です。bytes型のデータはバイトデータと呼ばれ、いわゆるバイナリデータのことです。数値にしろ、文字列にしろ、コンピュータ上では全てのデータは0と1のバイナリデータで取り扱われるので、文字列の扱いを理解するのにbytes型は重要になります。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です