문자열을 부동 소수점이나 정수로 구문 분석하려면 어떻게 하나요?

파이썬에서 545.2222와 같은 숫자 문자열을 해당 실수 값인 545.2222로 구문 분석하려면 어떻게 해야 하나요? 또는 문자열 31`을 정수31`로 구문 분석하려면 어떻게 해야 하나요?

나는 단지 float strflat으로, (별도로) int strint로 파싱하는 방법을 알고 싶습니다.

질문에 대한 의견 (1)
해결책
>>> a = "545.2222"
>>> float(a)
545.22220000000004
>>> int(float(a))
545
해설 (7)
def num(s):
    try:
        return int(s)
    except ValueError:
        return float(s)
해설 (5)

파이썬 메서드로부터 문자열으로 부동 소수점 여부를 확인할 수 있다.

def is_float(value):
  try:
    float(value)
    return True
  except:
    return False

더 더욱 정확하고 이름을 이 함수는 다음과 같을 수 있습니다. 'is_convertible_to_float (가치)'

[파이썬] [1] 에서 지정하십시오. 부동 소수점 없고, 놀랄 수 있습니다.

val                   is_float(val) Note
--------------------  ----------   --------------------------------
""                    False        Blank string
"127"                 True         Passed string
True                  True         Pure sweet Truth
"True"                False        Vile contemptible lie
False                 True         So false it becomes true
"123.456"             True         Decimal
"      -127    "      True         Spaces trimmed
"\t\n12\r\n"          True         whitespace ignored
"NaN"                 True         Not a number
"NaNanananaBATMAN"    False        I am Batman
"-iNF"                True         Negative infinity
"123.E4"              True         Exponential notation
".1"                  True         mantissa only
"1,234"               False        Commas gtfo
u'\x30'               True         Unicode is fine.
"NULL"                False        Null is not special
0x3fade               True         Hexadecimal
"6e7777777777777"     True         Shrunk to infinity
"1.797693e+308"       True         This is max value
"infinity"            True         Same as inf
"infinityandBEYOND"   False        Extra characters wreck it
"12.34.56"            False        Only one dot allowed
u'四'                 False        Japanese '4' is not a float.
"#56"                 False        Pound sign
"56%"                 False        Percent of what?
"0E0"                 True         Exponential, move dot 0 places
0**0                  True         0___0  Exponentiation
"-5e-5"               True         Raise to a negative number
"+1e1"                True         Plus is OK with exponent
"+1e1^5"              False        Fancy exponent not interpreted
"+1e1.3"              False        No decimals in exponent
"-+1"                 False        Make up your mind
"(1)"                 False        Parenthesis is bad

You think you know what 번호는? You are not so good 때 생각! 깜짝 크지는 않습니다.

[1]: http://en.wikipedia.org/wiki/Python_% 28programming_language% 29

39 의 소프트웨어 don&, t 이 코드를 사용하여 만든다!

이렇게 폭넓은 예외를 제외하고, 카나리스는 급등할 가능성이 작은 서있느라 및 삼키고 tcpg 유효한 부동 소수점 문자열로 반환되므로 거짓값. 부동 소수점 (.) '이' 수 있는 어떠한 실패 이유 코드 행을 못하니이는 아무 관련이 없다고 컨텐트에서 구체화하십시오. # 39 와 같은 언어를 쓰는 소프트웨어를 만든다, re 신앙이니라 you& 덕 타이핑 you& # 39, 파이썬, 그리고 훨씬 더 큰 문제를 ve got 프로토타입.

해설 (5)

여기서 말하는 것으로, 이것은 또 다른 방법을 받을 자격이 있는 [ast.literal_eval] (http://docs.python.org/library/ast.html # ast.literal_eval):

&gt. 이 평가 필요 없이 안전하게 사용할 수 있습니다 (관찰자) 의 값을 포함하는 문장열 표현식에서는 비신뢰 소스뿐만 분석할 수 있다.

39, & # 39, 즉, 안전한 eval&

>>> import ast
>>> ast.literal_eval("545.2222")
545.2222
>>> ast.literal_eval("31")
31
해설 (2)
float(x) if '.' in x else int(x)
해설 (6)

로컬라이제이션과 쉼표

쉼표 문자열의 나타내줍니다 가능성을 고려해야 할 수 있는 부동 (545,545.2222&quot ";) ',' 같은 사건에 대해서는 예외를 던진다. 대신 '쉼표' 를 사용하여 숫자 및 해석 방법으로 로케일에 변환하십시오 문장열 것입니다. 부동 소수점 한 번에 한 번 '이' 로 변환하는 방법을 로카레드라토프 로켈을 위해 설정되었습니다 원하는 개수가 발생원인.

  • Example1 - 미국 번호임 댁꽕 *

미국, 영국, 쉼표 걱정하지않아 분리자를 활용될 수 있다. 미국 로케일과 함께 예제에서와 쉼표를 분리자를 적절히 처리할 수 있습니다.

>>> import locale
>>> a = u'545,545.2222'
>>> locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
'en_US.UTF-8'
>>> locale.atof(a)
545545.2222
>>> int(locale.atof(a))
545545
>>>
  • 사례 2 - 유럽 번호임 댁꽕 *

세계 대부분의 나라에서 에서 사용되는 소수 자국이야, 쉼표 대신 기간. 프랑스어 로케일과 예제에서와 쉼표를 사용하여 올바르게 처리됩니까 소수로 표시:

>>> import locale
>>> b = u'545,2222'
>>> locale.setlocale(locale.LC_ALL, 'fr_FR')
'fr_FR'
>>> locale.atof(b)
545.2222

'도' 로카레스트로이 방법을 사용할 수 있지만 인수가 정수일 합니다.

해설 (3)

39, 타사 모듈에서는 하나 aren& 경우 t 파스트 움베르스 모듈에서는 체크아웃합니다 수 있습니다. It 는 함수 호출 [fast_real] [2] 가 정확히 무엇인지 묻는 것보다 빨리 순수 파이썬 구축 및 이 질문은 않습니다.

>>> from fastnumbers import fast_real
>>> fast_real("545.2222")
545.2222
>>> type(fast_real("545.2222"))
float
>>> fast_real("31")
31
>>> type(fast_real("31"))
int

[2]: http://fastnumbers.readthedocs.io/en/master/api.html # fastnumbers.fast_real

해설 (0)

사용자 codelogicharley가 맞지만 문자열이 정수(예: 545)라는 것을 알고 있다면 먼저 형변환을 하지 않고도 int(&545")를 호출할 수 있다는 점을 기억하세요.

문자열이 목록에 있는 경우 지도 함수를 사용할 수도 있습니다.

>>> x = ["545.0", "545.6", "999.2"]
>>> map(float, x)
[545.0, 545.60000000000002, 999.20000000000005]
>>>

모두 같은 유형인 경우에만 유용합니다.

해설 (1)

[질문] 조금 오래된 것 같다. 그러나 let me 제안하세요 페르세스트 함수, 즉, 정수 또는 아웃하기로 띄울 수 있는 비슷한 되돌려줍니다 주어진 ASCII 문자열) 로 변환할 수 없는 그들 중 아무도 이 it 되돌려줍니다 그대로 둡니다. 물론 코드 조정됨 미디어만을 그리웠댔지 할 수 있습니다.

   >>> import string
   >>> parseStr = lambda x: x.isalpha() and x or x.isdigit() and \
   ...                      int(x) or x.isalnum() and x or \
   ...                      len(set(string.punctuation).intersection(x)) == 1 and \
   ...                      x.count('.') == 1 and float(x) or x
   >>> parseStr('123')
   123
   >>> parseStr('123.3')
   123.3
   >>> parseStr('3HC1')
   '3HC1'
   >>> parseStr('12.e5')
   1200000.0
   >>> parseStr('12$5')
   '12$5'
   >>> parseStr('12.2.2')
   '12.2.2'
해설 (1)

&gt. 의 숫자 같은 문자열 구문 분석, 파이썬, 어떻게 &quot 545.2222&quot. 해당 부동 소수점 값, 542.2222? 문자열 구문 분석, 또는 &quot 31&quot. 가능 정수 (31) 구문 분석 방법을 알고 싶어요 부동 소수점 문자열을 string 부동 소수점 및 (별도) 승인/보류 int 충족되었으며 int.

39 의 it& 하나님께용서를 이 일을 하고 있는지 잘 샀다. # 39, re 혼합 you& 경우 그 문제에 대한 클린업합니다 나중에 교도관님도요 설정할 수 있습니다. 단순 그 답을 찾을 수 있습니다.

  • ',' 을 float:* 545.2222&quot &quot.
>>> float("545.2222")
545.2222
  • ',' 충족되었으며 integer:* 31&quot &quot.
>>> int("31")
31

변환에는, 정수 주고 다른 문자열과 리터럴:

다양한 변환에는 기반, 사전에 알고 있어야 하는 기본 (10 기본값입니다). 참고 있다 (아래 참조) 또는 파이썬 그들과 함께 접두어입니다 수 있습니다 어떤 리터럴을 접두사입니다 제거하시겠습니까 있을 것으로 기대하고 있다.

>>> int("0b11111", 2)
31
>>> int("11111", 2)
31
>>> int('0o37', 8)
31
>>> int('37', 8)
31
>>> int('0x1f', 16)
31
>>> int('1f', 16)
31

39 don& 모르는 경우, 기본 확장하지만 사전에 알고 있을 것 '0' 이 경우, 파이썬 추론할 수 있는 올바른 접두어입니다 전달하십시오 기준으로:

>>> int("0b11111", 0)
31
>>> int('0o37', 0)
31
>>> int('0x1f', 0)
31

비 진수 (즉, 정수) 의 다른 기지 리터럴

특정 값을 가지게 될 경우 자신의 코드를 직접 동기를 명확히 표현할 필요는 없습니다, 하지만 이제 함께 할 수 있습니다 - Python 에서 변환하십시오 베이스를 사용하면 자동으로 올바른 문법.

때마침 접두사 를 함께 사용할 수 있습니다 afaq 자동 변환 정수 [다음 리터럴] [1]. 이러한 사용할 수 있는 파이썬 2 와 3:

바이너리인 접두어입니다 0b ''

>>> 0b11111
31

',' 0o 접두어입니다 팔진법

>>> 0o37
31

'진수' 0x, 접미어입니다.

>>> 0x1f
31

코드의 이진 플래그, 파일 권한 설명할 때 유용할 수 있습니다, 또는 hex 값을 색계열 - 예를 들어, 참고 안춥단다 인용:

>>> 0b10101 # binary flags
21
>>> 0o755 # read, write, execute perms for owner, read & ex for group & others
493
>>> 0xffffff # the color, white, max values for red, green, and blue
16777215

있어 모호한 파이썬 2 팔진법 호환됩니까 파이썬 3

즉, 정수 0 에서 2 로 시작하는, 파이썬, 이는 옥탈칩을 구문 (사용되지 않음).

>>> 037
31

때문에 이 값은 37 '수' 것은 나쁜 것 같습니다. 따라서 이제는 '3' 는 파이썬 SyntaxError 제기한다.

>>> 037
  File "", line 1
    037
      ^
SyntaxError: invalid token

파이썬 2 팔진법 팔진법 수 있는 모두 작업하십시오 너회의 변환하시겠습니까 2 와 3 '와' 0o 접두어입니다:

>>> 0o37
31

[1]: https://docs.python.org/3/reference/lexical_analysis.html # 정수 리터럴

해설 (0)

float(545.2222")int(float(545.2222"))`입니다.

해설 (1)

YAML 의 파서를 너회의 문자열은 데이터 형식 분석할 수 있습니다. 사용 후 리타 라자로이드 () ',' 유형 ' (결과)' 유형용 테스트하려면 사용할 수 있습니다.

>>> import yaml

>>> a = "545.2222"
>>> result = yaml.load(a)
>>> result
545.22220000000004
>>> type(result)


>>> b = "31"
>>> result = yaml.load(b)
>>> result
31
>>> type(result)


>>> c = "HI"
>>> result = yaml.load(c)
>>> result
'HI'
>>> type(result)
해설 (0)

내가 이 기능을 사용하여 해당

import ast

def parse_str(s):
   try:
      return ast.literal_eval(str(s))
   except:
      return

그 유형을 변환하십시오 문자열을 방침이다.

value = parse_str('1')  # Returns Integer
value = parse_str('1.5')  # Returns Float
해설 (1)
def get_int_or_float(v):
    number_as_float = float(v)
    number_as_int = int(number_as_float)
    return number_as_int if number_as_float == number_as_int else number_as_float
해설 (3)

"' 데프 num (s): num %hsmb &quot &quot ";; num (3), num -&gt (3.7), 3 num (& # 39, 3& # 39;), 3, num (& # 39, 3.7& # 39;) -&gt 3.7 -&gt. num (& # 39, 3,700& # 39;) 바루어로 -&gt. num (& # 39, 3a& # 39;), 숫자 (& # 39, a3& # 39;), - 바루어로 &gt. num (& # 39, 3e4& # 39;) - &gt. 30000.0 &quot &quot ";; 종료기: 반품하십시오 int (s) 그러나 바루어로: 종료기: 반품하십시오 부동 (s) 그러나 바루어로: 높이는 바루어로 (& # 39 의 인수가 아닌, 문자열으로 number& # 39;) "'

해설 (0)

이를 제대로 둥글리기 고려해야 합니다.

Int (5.1) = &gt, e. i. 5 int (5.6) = &gt. 5 - 6, 그래서 우리가 잘못된 int (5.6 + 0.5) = &gt 합니다. 6

def convert(n):
    try:
        return int(n)
    except ValueError:
        return float(n + 0.5)
해설 (2)

파이썬 사용할 수 있는 캐스트 하여 장소 구성자를 유형의 반군지역 string (또는 값이 시도할 캐스트) 를 매개변수입니다.

예를 들면 다음과 같습니다.

>>>float("23.333")
   23.333

Behind the scenes, python 은 부동 소수점 표현은 ',' 하는 방법을 객체에는 호출하십시오 float 복귀하십시오 매개변수입니다. 이는 특히 강력한 유형 (클래스를 사용하여) 를 정의할 수 있듯이 '를 띄울 수 있도록 float' 방법을 사용하여 부동 소수점 주조 (myobject).

해설 (0)

가끔 내가 놀란 것은 수 있기 때문에 문자열 및 표준화된 아니예 regex 전에 준비해야 한다 "고 말했다

import re
def parseNumber(value, as_int=False):
    try:
        number = float(re.sub('[^.\-\d]', '', value))
        if as_int:
            return int(number + 0.5)
        else:
            return number
    except ValueError:
        return float('nan')  # or None if you wish

사용법:

parseNumber('13,345')
> 13345.0

parseNumber('- 123 000')
> -123000.0

parseNumber('99999\n')
> 99999.0

그나저나, 그리고 할 수 있는지 확인합니다.

import numbers
def is_number(value):
    return isinstance(value, numbers.Number)
    # will work with int, float, long, Decimal
해설 (0)

이렇게 하면 '다시' int '또는' 부동 인컨텍스트 시도하시겠습니까 문자열으로 분석할 수 있는 문자열 항목에 따라 것입니다. 구문 분석 예외 또는 상승할 가능성이 높다고 %s/dbase/ext_table. 예상하지 못한 행동을.

  def get_int_or_float(v):
        number_as_float = float(v)
        number_as_int = int(number_as_float)
        return number_as_int if number_as_float == number_as_int else 
        number_as_float
해설 (0)

사용:

def num(s):
    try:
        for each in s:
            yield int(each)
    except ValueError:
        yield float(each)
a = num(["123.55","345","44"])
print a.next()
print a.next()

이것이 가장 파이썬 내놓아야 할 수 있는 한 방법입니다.

해설 (1)