파이썬에서 문자열을 부동 또는 정수로 변환하는 방법

Jinku Hu 2023년1월30일
  1. 파이썬에서 문자열을 부동으로 변환하는 float()
  2. 파이썬에서 문자열을 int 로 변환하는 int()
  3. 파이썬에서 문자열을 부동 또는 정수로 변환하는 ast.literal_eval
  4. 파이썬에서 문자열을 부동으로 변환하는 지역화 및 쉼표
  5. 파이썬에서 문자열을 float 또는 int 로 변환하는 다른 메소드의 성능 비교
파이썬에서 문자열을 부동 또는 정수로 변환하는 방법

이 튜토리얼 기사는 파이썬에서 문자열을 float 또는 int 로 변환하는 방법을 소개합니다.

파이썬에서 문자열을 부동으로 변환하는 float()

float()는 가능하다면 문자열을 float 포인팅 숫자로 변환합니다.

>>> float('111.2222')
111.2222
>>> float('111.0')
111.0
>>> float('111')
111.0

파이썬에서 문자열을 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

파이썬에서 문자열을 부동 또는 정수로 변환하는 ast.literal_eval

ast.literal_eval(string)은 파이썬 표현식을 포함하는 주어진 문자열을 안전하게 평가합니다. 문자열을 float 또는 int 로 자동 변환 할 수 있습니다.

>>> ast.literal_eval('111.2222')
111.2222
>>> ast.literal_eval('111.0')
111.0
>>> ast.literal_eval('111')
111

파이썬에서 문자열을 부동으로 변환하는 지역화 및 쉼표

문자열 표현에 쉼표,가 있으면 float 변환시 ValueError 예외가 발생합니다. 그러나 쉼표는 미국이나 영국과 같은 국가 (예 : ‘111,111.22’)에서 천 단위 구분 기호로 사용되거나 대부분의 유럽 국가에서는 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()함수는 로케일 설정에 따라 주어진 문자열을 부동 소수점으로 구문 분석 할 수 있습니다.

미국 또는 영국에서 천 단위 구분자로 쉼표

>>> 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,222111.222 로 적절하게 변환되고 111.111,222 는 네덜란드와 같은 유럽 국가에서 천 구분자로 사용되므로 111111.222 로 적절하게 변환 될 수 있습니다.

파이썬에서 문자열을 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메소드보다 훨씬 느립니다. 파이썬에서 단순히 문자열을 float 또는 int 로 변환 해야하는 경우 가장 먼저 선택해서는 안됩니다. ast.literal_eval()은이 응용 프로그램에서 과도하게 엔지니어링되었습니다. 주요 목표는 파이썬 표현식을 포함하는 문자열을 평가해야하기 때문입니다.

locale.atof()도 매우 느리기 때문에 미국이나 영국의 컨벤션을 위해 문자열에 쉼표가있을 경우에만 사용해야합니다. 유럽 ​​국가에서. 다시 말해, 실제로 필요한 경우 locale.atof()를 사용해야합니다.

작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - Python String