【Python】int(数値)とstring(文字列)を変換する方法

【Python】int(数値)とstring(文字列)を変換する方法

公開: 更新:



Pythonで文字列を数値(int・整数型)に変換する方法

Python文字列を数値に変換する場合、主にint()関数を使用します。文字列に含まれる文字が有効な整数表現(半角数字や符号など)であれば、そのまま整数に変換できます。ただし、無効な文字(数字以外のアルファベットや空文字など)が含まれていると、ValueErrorが発生する点に注意が必要です。

# 【サンプルコード】
# 文字列から整数への変換
text_number = "123"
number = int(text_number)
print(f"変換前の型: {type(text_number)}, 値: {text_number}")
print(f"変換後の型: {type(number)}, 値: {number}")

# 進数を指定して変換 (例: 2進数)
binary_str = "1010"
number_binary = int(binary_str, 2)
print(f"2進数 '{binary_str}' を整数に変換: {number_binary}")
# 【実行結果】
変換前の型: , 値: 123
変換後の型: , 値: 123
2進数 '1010' を整数に変換: 10
行番号 詳細説明
2行目 text_numberに"123"という文字列を代入
3行目 int関数で文字列を整数に変換してnumberに代入
4行目 変換前の型と値をprint関数で出力
5行目 変換後の型と値をprint関数で出力
7行目 2進数を表す文字列"1010"をbinary_strに代入
8行目 int関数の第二引数に2を指定し2進数を整数として解釈
9行目 2進数から変換した結果をprint関数で出力

基数の指定にはint(文字列, 基数)を使用します。2進数や16進数など、さまざまな進数表現の文字列を簡単に整数へ変換できます。ただし、変換できない形式の文字列を渡すとValueErrorが発生するため、入力データの検証を行うかtry-except構文によるエラー処理を取り入れることが望ましいです。

【PR】プログラミングや生成AIを無料で学べる「コードキャンプフリー」

Pythonで数値を文字列(string型)に変換する方法

Pythonで数値を文字列に変換する場合、str()関数を使用するのが基本です。整数だけではなくその他のオブジェクトでも、str()関数で文字列表現を得られます。以下では整数から文字列への変換例を示します。

# 【サンプルコード】
# 整数から文字列へ
num = 456
text_num = str(num)
print(f"変換前: {num}, 型: {type(num)}")
print(f"変換後: {text_num}, 型: {type(text_num)}")

# 16進数などへの変換
hex_val = hex(num)
print(f"16進数表現: {hex_val}")
# 【実行結果】
変換前: 456, 型: 
変換後: 456, 型: 
16進数表現: 0x1c8
行番号 詳細説明
2行目 numに整数456を代入
3行目 str関数で整数を文字列に変換しtext_numに代入
4行目 変換前の値と型をprint関数で出力
5行目 変換後の値と型をprint関数で出力
7行目 hex関数で整数を16進数表現の文字列に変換し結果を出力

整数以外にもbin()oct()hex()を使うと特定の進数表記で文字列を得ることができます。さらにフォーマット文字列(f文字列)やformat()メソッドを使えば、カンマ区切りなど多様な形式で文字列に変換できます。

数値変換におけるエラー処理と型変換の注意点

文字列から数値への変換では、無効な文字列を渡した場合にValueErrorが発生し、プログラムが停止してしまいます。ユーザー入力やファイル読込みなど外部データを取り扱う際は、try-except構文でエラーを捕捉したり、事前に文字列の検証を行うことが重要です。

また、浮動小数点数や複数の型変換が絡むと誤差や意図しない変換が起こることがあるため、decimalモジュールDecimalクラスなども検討します。以下はエラー処理と型検証の例です。

# 【サンプルコード】
def safe_convert_to_int(value):
    try:
        return int(value)
    except ValueError:
        print(f"エラー: '{value}'は整数に変換できません")
        return None

test_values = ["123", "45.67", "abc", "", "99x"]

for val in test_values:
    result = safe_convert_to_int(val)
    if result is not None:
        print(f"'{val}' → {result}")
    else:
        print(f"'{val}'の変換に失敗")

def validate_and_convert(value):
    if value.isdigit():
        return int(value)
    elif value.startswith('-') and value[1:].isdigit():
        return int(value)
    else:
        return None

print("\n入力検証の結果:")
for v in ["-42", "abc", "123", "0"]:
    print(f"'{v}' → {validate_and_convert(v)}")
# 【実行結果】
'123' → 123
エラー: '45.67'は整数に変換できません
'45.67'の変換に失敗
エラー: 'abc'は整数に変換できません
'abc'の変換に失敗
エラー: ''は整数に変換できません
''の変換に失敗
エラー: '99x'は整数に変換できません
'99x'の変換に失敗

入力検証の結果:
'-42' → -42
'abc' → None
'123' → 123
'0' → 0
行番号 詳細説明
1行目 文字列を安全に整数へ変換する関数safe_convert_to_intを定義
2行目 tryブロックでint関数を実行
3行目 ValueErrorが発生しなければその結果を返す
4行目 ValueError例外を捕捉しメッセージを表示後Noneを返す
7行目 テスト用リストtest_valuesを定義
9行目 safe_convert_to_intで変換を試行し結果を受け取る
13行目 validate_and_convert関数を定義し事前検証を行う
14行目 value.isdigit()で数字のみか確認し真ならintに変換
15行目 先頭が-で残りが数字だけか確認し真ならintに変換
16行目 どちらでもない場合はNoneを返す
21行目 validate_and_convertを複数の文字列に適用し結果を出力

さらに、複雑な型変換が必要となる実例として、CSVデータなどから文字列を取得して動的にintfloatに変換するケースが挙げられます。

# 【サンプルコード】
csv_data = "名前,年齢,身長\n田中太郎,28,175.5\n佐藤花子,24,162.3"

def process_csv_data(csv_string):
    lines = csv_string.strip().split('\n')
    headers = lines[0].split(',')
    result = []
    
    for i in range(1, len(lines)):
        values = lines[i].split(',')
        person = {}
        for j in range(len(headers)):
            value = values[j]
            if value.isdigit():
                person[headers[j]] = int(value)
            else:
                try:
                    person[headers[j]] = float(value)
                except ValueError:
                    person[headers[j]] = value
        result.append(person)
    return result

people = process_csv_data(csv_data)
print("処理済みデータ:")
for person in people:
    print(person)
# 【実行結果】
処理済みデータ:
{'名前': '田中太郎', '年齢': 28, '身長': 175.5}
{'名前': '佐藤花子', '年齢': 24, '身長': 162.3}
行番号 詳細説明
1行目 CSV形式の文字列をcsv_dataに定義
3行目 process_csv_data関数を定義
4行目 改行で分割して行単位のリストを得る
5行目 最初の行をsplitで分割しヘッダ情報を取得
9行目 2行目以降を各行ごとにさらにsplitで分割
10行目 personという辞書を用意
12行目 valueが数字のみならintに変換
14行目 floatに変換できる場合はfloatに変換
16行目 それでも変換できなければ文字列のまま保持
18行目 加工した情報をリストに追加し最後にreturn
22行目 process_csv_dataの結果をpeopleに格納し内容を出力

このように事前に文字列の内容を検証することで、意図した通りの型へ安全に変換できます。誤った入力や空文字の場合はエラーを起こす前に分岐処理できるため、大規模なシステムでも安心です。

【PR】『Python』を学べる企業・個人向けのプログラミングコース

Pythonのintやstringに関するQ&A

Pythonでデータ型を確認する方法を教えてください

代表的なのはtype()関数で、任意の変数や値を引数にすると、そのオブジェクトの型を返します。例えばtype(123)type("abc")となります。

# 【サンプルコード】
# さまざまな型を用意
val_int = 10
val_str = "Hello"
val_float = 3.14
val_list = [1, 2, 3]

# type関数でそれぞれの型を確認
print(type(val_int))   # 
print(type(val_str))   # 
print(type(val_float)) # 
print(type(val_list))  # 
# 【実行結果】




行番号 詳細説明
1行目 サンプルコードで使用する変数val_intなどを定義
2行目 val_intに整数10を代入
3行目 val_strに文字列"Hello"を代入
4行目 val_floatに浮動小数点数3.14を代入
5行目 val_listにリスト[1, 2, 3]を代入
8行目 type関数を使い各変数の型をprint関数で出力

数字をintではなくfloatに変換する方法を教えてください

文字列を浮動小数点数に変換する場合はfloat()関数を使用します。int("3.14")のように小数点を含む文字列をint()へ渡すとValueErrorになりますが、float("3.14")なら3.14という浮動小数点数に変換できます。

# 【サンプルコード】
# 文字列の数値をfloatに変換
num_str = "3.14"
float_num = float(num_str)
print(f"変換前: {num_str}, 型: {type(num_str)}")
print(f"変換後: {float_num}, 型: {type(float_num)}")

# int関数を使った場合の比較例
try:
    int_num = int(num_str)  # ここではエラーが発生
except ValueError:
    print(f"int関数に'{num_str}'を渡すとValueErrorが発生")
# 【実行結果】
変換前: 3.14, 型: 
変換後: 3.14, 型: 
int関数に'3.14'を渡すとValueErrorが発生
行番号 詳細説明
1行目 num_strに文字列"3.14"を代入
2行目 float関数でnum_strを浮動小数点数に変換しfloat_numに代入
3行目 変換前の値と型をprint関数で出力
4行目 変換後の値と型をprint関数で出力
7行目 int関数に"3.14"を渡してエラーが発生する様子をtry-exceptで示す
9行目 int関数に"3.14"を渡すとValueErrorが発生するためメッセージを出力

キャストとは何ですか?

プログラミングにおけるキャストは、あるデータ型の値を別のデータ型に変換する行為を指します。Pythonではint()float()str()などの関数を使うことでキャストを実現します。

# 【サンプルコード】
# 整数を文字列にキャスト
val_int = 100
val_str = str(val_int)

print(f"整数から文字列に変換: {val_str}, 型: {type(val_str)}")

# 文字列を整数にキャスト
text_num = "256"
num_int = int(text_num)

print(f"文字列から整数に変換: {num_int}, 型: {type(num_int)}")

# 文字列を浮動小数点数にキャスト
text_float = "7.89"
num_float = float(text_float)

print(f"文字列からfloatに変換: {num_float}, 型: {type(num_float)}")
# 【実行結果】
整数から文字列に変換: 100, 型: 
文字列から整数に変換: 256, 型: 
文字列からfloatに変換: 7.89, 型: 
行番号 詳細説明
1行目 val_intに整数100を代入
2行目 str関数で整数を文字列に変換しval_strに代入
4行目 キャスト後の値と型をprint関数で出力
7行目 文字列"256"をint関数で整数に変換
9行目 文字列"256"を整数に変換した結果と型をprint関数で出力
12行目 文字列"7.89"をfloat関数で浮動小数点数に変換
14行目 浮動小数点数に変換した結果と型をprint関数で出力

※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。

ITやプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する