Python で文字列を浮動小数点または整数に変換する方法
-
Python で文字列を float に変換する
float() -
Python で文字列を int に変換する
int() -
Python で文字列を float または int に変換する
ast.literal_eval - Python で文字列を float に変換する際のローカライズとコンマ
- Python で文字列を float または int に変換するさまざまな方法のパフォーマンスの比較
このチュートリアル記事では、Python で文字列を float または int に変換する方法を紹介します。
Python で文字列を float に変換する float()
float() は、可能であれば、文字列を float ポインティング番号に変換します。
>>> float('111.2222')
111.2222
>>> float('111.0')
111.0
>>> float('111')
111.0
Python で文字列を int に変換する int()
int() は、与えられた文字列が整数の表現である場合、文字列を整数に変換できます。そうでなければ、ValueError を送出します。
>>> int('111')
111
>>> int('111.0')
Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
int('111.0')
ValueError: invalid literal for int() with base 10: '111.0'
>>> int('111.22222')
Traceback (most recent call last):
File "<pyshell#45>", line 1, in <module>
int('111.22222')
ValueError: invalid literal for int() with base 10: '111.22222'
与えられた文字列が浮動小数点数の表現である場合、最初に文字列を float に変換し、次に int にキャストできます。
>>> int(float('111.0'))
111
Python で文字列を float または int に変換する ast.literal_eval
ast.literal_eval(string) は Python 式を含む与えられた文字列を安全に評価します。文字列を自動的に float または int に変換できます。
>>> ast.literal_eval('111.2222')
111.2222
>>> ast.literal_eval('111.0')
111.0
>>> ast.literal_eval('111')
111
Python で文字列を float に変換する際のローカライズとコンマ
文字列表現にコンマ , が存在する場合、float 変換は ValueError 例外をスローします。ただし、コンマは、米国や英国などの 111,111.22 などの国では 1000 の区切り文字として、またはほとんどのヨーロッパ諸国では111,222 などの小数点として通常使用されます。
>>> float('111,111.22')
Traceback (most recent call last):
File "<pyshell#54>", line 1, in <module>
float('111,111.22')
ValueError: could not convert string to float: '111,111.22'
>>> float('111,111')
Traceback (most recent call last):
File "<pyshell#55>", line 1, in <module>
float('111,111')
ValueError: could not convert string to float: '111,111'
locale モジュールを使用してロケール情報を割り当てると、locale.atof() 関数は指定された文字列をロケール設定に従って float として解析できます。
米国または英国での千の区切り文字としてのカンマ
>>> import locale
>>> A = '111,111.222'
>>> locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
'en_US.UTF-8'
>>> locale.atof(A)
111111.222
>>> locale.atof('111,111')
111111.0
適切なロケール設定が指定されている場合、カンマ、は正しく解釈されます。
また、指定された文字列表現が整数であっても、変換結果は常に float 型であることに注意してください。
ヨーロッパ諸国でのデミカルマークとしてのカンマ
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'nl_NL')
'nl_NL'
>>> locale.atof('111,222')
111.222
>>> locale.atof('111.111,222')
111111.222
111,222 は 111.222 に適切に変換され、。がオランダなどの欧州諸国では千の区切り文字として使用されるため、111.111,222 も 111111.222 に適切に変換できます。
Python で文字列を float または int に変換するさまざまな方法のパフォーマンスの比較
timeit を使用して、さまざまなメソッド間の効率パフォーマンスを確認します。
>>> import timeint
>>> timeit.timeit('float(111.2222)', number=1000000)
0.14707240000007005
>>> timeit.timeit('ast.literal_eval("111.2222")', setup='import ast', number=1000000)
4.779956100000163
>>> timeit.timeit('locale.atof("111.2222")', setup='import locale; locale.setlocale(locale.LC_ALL, "en_US.UTF-8")', number=1000000)
6.092166299999917
上記のように、ast.literal_eval() メソッドは float メソッドよりも非常に遅くなります。Python で文字列を float または int に変換するだけの場合は、最初の選択肢ではありません。ast.literal_eval() は、このアプリケーションでは主なターゲットが Python 式を含む文字列を評価する必要があるため、過剰に設計されています。
locale.atof() も非常に遅いため、US または UK の規則の文字列にコンマが存在する場合、またはポイント。は 1000 の区切り文字を意味しますが、コンマ、は小数点ヨーロッパ諸国で。言い換えれば、本当に必要な場合は locale.atof() を使用する必要があります。
