【Python】「型」と「型変換」について調べた

Python 3 での「型」と「型変換」について調べました。

想像以上に複雑で、まだまだ理解できていません。

 

 

型を調べる

型変換をしようとしても初めに現在の型は何か確認する必要があります。

 

■直接指定する場合

print(type('調べたいデータ'))

 

 

■変数の中身を調べる場合

var = '調べたいデータ'

print(type(var))

 

bytes型なら以下のように表示されます。

b'e382a2e38395 ~'

 

 

Python 3 では「文字列」は「str型」と「bytes型」の2種類がある

今まで「文字列」イコール「str型」と思っていましたが、そうではなかったんですね。

しかし「文字列」と「バイト列」もありますので更に複雑です。

 

Python の b'e382a2e38395 ~' の「b」は何か?

バイト列型(bytes型)の場合、以下のように「b'~'」と出力されます。

そもそもこの「b」は何でしょうか。

b'~'の「b」は、バイト列を表現するためについています。

 

b'a' ← bytes型で「a」

b'~' ← OK

b"~" ← これも OK

 

 

バイト列とは?

そもそも論ですが、なぜ「バイト列」を使う必要があるのでしょうか?

  • 16進数で確認したい
  • バイト列は一見すると「文字列」に見えるが「文字列」ではない

 

str 型から bytes 型へ

encodeを使います。

以下の構文で変換できます。

'変換したい文字列'.encode('utf-8')

 

以下のように「b'~'」と表示されます。

(pyenv) [test@SAKURA_VPS scraping]$ python
Python 3.6.3 (default, Oct 11 2017, 18:17:37)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> '変換したい文字列'.encode('utf-8')
b'\xe5\xa4\x89\xe6\x8f\x9b\xe3\x81\x97\xe3\x81\x9f\xe3\x81\x84\xe6\x96\x87\xe5\xad\x97\xe5\x88\x97'
>>>

 

 

bytes 型から str 型へ

decodeを使います。

以下の構文で変換できます。

b'\xe5\xa4\x89\xe6\x8f\x9b'.decode('utf-8')

 

以下のように「b'~'」と表示されます。

>>> b'\xe5\xa4\x89\xe6\x8f\x9b'.decode('utf-8')
'変換'
>>>

 

 

bytearray 型

bytearray 型は変更可能。

変更もできます。

bytearray.replace(old, new[, count])

 

 

ord とは?

1 文字の Unicode 文字を表す文字列に対し、その文字の Unicode コードポイントを表す整数を返します。

例えば、 ord('a') は整数 97 を返し、ord('€') (ユーロ記号) は 8364 を返します。

これは chr() の逆です。

 

 

参考サイト

Pythonのstr型とbytes型

https://www.kannon.link/fuku/index.php/2017/02/22/01-34/

まとめ

ややこしくてなかなか理解できません。

 

■登場人物

  • 文字列
  • バイト列
  • str型
  • bytes型
  • bytearray型

 

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人

コメントを残す

メールアドレスが公開されることはありません。