Pythonプログラムにおける数値(整数や浮動小数点数)から文字列へのデータ型変換について解説します。
文字列から整数や浮動小数点数へのデータ型変換については「Python入門 文字列から数値にデータ型を変換する」をご覧ください。
数値から文字列にデータ型を変換する理由
まずは次のソースコードをご覧ください。このソースコードを実行すると3行目でエラー(TypeError)となってしまいます。
a = 23 # これは数値
b = "歳" # これは文字列
c = a + b # ここでエラーとなる
print(c)
変数 a に代入した値「23」は、数値です。変数 b に代入した値「”歳”」は、文字列です。Pythonは数値と文字列の連結(結合)はできません。
数値のままでは文字列の連結(結合)が行えないため、データ型を「整数(int)」や「浮動小数点数(float)」から「文字列(str)」に変換する必要があるのです。
オブジェクトとデータ型については「Python入門 オブジェクトとデータ型」も参考にしてみてください。
文字列と文字列の連結(結合)方法については「Python入門 文字列と文字列を連結(結合)する」も参考にしてみてください。
整数(int)から文字列(str)にデータ型を変換する方法
整数(int)から文字列(str)へのデータ型変換には「str()」を使用します。コマンドプロンプトに実行結果を表示する場合は「str()」の外側を「print()」で囲みます。
print(str(23))
サンプルプログラム(ソースコード)
変数 a に代入した整数「23」を「str(a)」で文字列にデータ型変換し、変数 b に代入した文字列「”歳”」と連結(結合)した値を変数 c に代入する文字列連結プログラムです。
いくつか「type()」を使いデータ型や「id()」を使いオブジェクトIDを「print()」で表示させています。データ型が変換されたか、オブジェクト(値)は同じものなのか、などを確認するためです。
a = 23
b = "歳"
c = str(a) + b
print(c)
# str(a) のデータ型を確認
print(type(str(a)))
# 変数 a のデータ型を確認
print(type(a))
# str(a) と 変数 a のオブジェクトIDを確認
print(id(a)) # 変数 a
print(id(str(a))) # str(a)
a = str(a)
# 再代入後の 変数 a のデータ型を確認
print(type(a))
# 変数 a のオブジェクトIDを確認
print(id(a)) # 変数 a
変数の定義と代入については「Python入門 変数の定義と代入および変数名の付け方」も参考にしてみてください。
サンプルプログラム(ソースコード)の保存先
- 保存先(venv仮想環境):C:\code\py310\venv\trial
- ファイル名:sample_code_029.py
- エンコード:UTF-8
コマンドプロンプトでサンプルプログラム(ソースコード)を実行
実行すると、変数 a を「str(a)」で文字列にデータ型を変換して文字列の連結(結合)ができるようにしてから、変数 b の文字列「”歳”」と連結しています。実行結果を見ると2行目に「23歳」と表示されています。
ここで注目してほしいところは、実行結果の3・4・7行目のデータ型と5・6・8行目のオブジェクトIDです。
まずデータ型ですが「str(a)」では変数 a のデータ型は変わりません。「str(a)」を実行すると「str(a)」と紐づく値のデータ型は「<class ‘str’>」(文字列)となります。しかし、変数 a と紐づく値のデータ型は「<class ‘int’>」(整数)のままです。
次にオブジェクトIDですが「str(a)」では変数 a と紐づく値は変わりません。変数 a と「str(a)」は異なるオブジェクトIDとなっています。つまり、変数 a と「str(a)」は別の値と紐づいているということです。
変数 a の値を整数(int)から文字列(str)にしたいなら「a = str(a)」のように変数 a に「str(a)」を再代入します。再代入すると変数と値の紐づけが変わります。すると実行結果の7行目のように「<class ‘str’>」(文字列)となり8行目のように「str(a)」と同じオブジェクトIDとなります。
(trial) C:\code\py310\venv\trial>python sample_code_029.py
23歳 ← print(c)
<class 'str'> ← print(type(str(a)))
<class 'int'> ← print(type(a))
2724142908336 ← print(id(a))
2724148313968 ← print(id(str(a)))
<class 'str'> ← print(type(a))
2724148313968 ← print(id(a))
(trial) C:\code\py310\venv\trial>
「id()」で表示したオブジェクトIDの数字(識別値)はプログラムを実行するたびに変わるため上記の例とは数字が異なります。
浮動小数点数(float)から文字列(str)にデータ型を変換する方法
浮動小数点数(float)から文字列(str)へのデータ型変換にも「str()」を使用します。コマンドプロンプトに実行結果を表示する場合は「str()」の外側を「print()」で囲みます。
print(str(70.8))
文字列へのデータ型変換は、整数(int)と浮動小数点数(float)のどちらも「str()」を使用します。
サンプルプログラム(ソースコード)
変数 a に代入した浮動小数点数「70.8」を「str(a)」で文字列にデータ型変換し、変数 b に代入した文字列「”kg”」と連結(結合)した値を変数 c に代入する文字列連結プログラムです。
a = 70.8
b = "kg"
c = str(a) + b
print(c)
# str(a) のデータ型を確認
print(type(str(a)))
# 変数 a のデータ型を確認
print(type(a))
# str(a) と 変数 a のオブジェクトIDを確認
print(id(a)) # 変数 a
print(id(str(a))) # str(a)
a = str(a)
# 再代入後の 変数 a のデータ型を確認
print(type(a))
# 変数 a のオブジェクトIDを確認
print(id(a)) # 変数 a
サンプルプログラム(ソースコード)の保存先
- 保存先(venv仮想環境):C:\code\py310\venv\trial
- ファイル名:sample_code_030.py
- エンコード:UTF-8
コマンドプロンプトでサンプルプログラム(ソースコード)を実行
実行すると、変数 a を「str(a)」で文字列にデータ型を変換して文字列の連結(結合)ができるようにしてから、変数 b の文字列「”kg”」と連結しています。実行結果を見ると2行目に「70.8kg」と表示されています。
(trial) C:\code\py310\venv\trial>python sample_code_030.py
70.8kg ← print(c)
<class 'str'> ← print(type(str(a)))
<class 'float'> ← print(type(a))
2706776442800 ← print(id(a))
2706785567088 ← print(id(str(a)))
<class 'str'> ← print(type(a))
2706785567088 ← print(id(a))
(trial) C:\code\py310\venv\trial>
まとめ
- Pythonは数値と文字列の連結(結合)はできないため整数や浮動小数点数を文字列に変換する必要がある
- 整数(int)から文字列(str)へのデータ型変換には「str()」を使用する
- 浮動小数点数(float)から文字列(str)へのデータ型変換にも「str()」を使用する
- str(a)」では変数 a のデータ型は変わらない
- 「str(a)」では変数 a と紐づく値は変わらない
- 変数の値を整数や浮動小数点数から文字列に変えるには再代入が必要となる