Programing

천 단위 구분 기호로 쉼표가있는 경우 문자열을 숫자로 변환하는 방법은 무엇입니까?

lottogame 2020. 10. 19. 07:38
반응형

천 단위 구분 기호로 쉼표가있는 경우 문자열을 숫자로 변환하는 방법은 무엇입니까?


수천을 구분하기 위해 쉼표를 사용하는 숫자를 나타내는 문자열이 있습니다. 이것을 파이썬에서 어떻게 숫자로 변환 할 수 있습니까?

>>> int("1,000,000")

생성합니다 ValueError.

변환을 시도하기 전에 쉼표를 빈 문자열로 바꿀 수 있지만 어떻게 든 잘못 느껴집니다. 더 좋은 방법이 있습니까?


import locale
locale.setlocale( locale.LC_ALL, 'en_US.UTF-8' ) 
locale.atoi('1,000,000')
# 1000000
locale.atof('1,000,000.53')
# 1000000.53

천 단위 구분 기호로 숫자를 구문 분석하는 방법에는 여러 가지가 있습니다. 그리고 @unutbu가 설명하는 방식이 모든 경우에 최고라고 생각하지 않습니다. 그래서 다른 방법도 나열합니다.

  1. 호출 할 적절한 장소 setlocale()__main__모듈에 있습니다. 전역 설정이며 전체 프로그램 및 C 확장에도 영향을줍니다 (LC_NUMERIC 설정은 시스템 수준에서 설정되지 않지만 Python에 의해 에뮬레이션 됨). 읽기 설명서에주의 사항을 이 길을 가기 전에 두 번 생각합니다. 단일 응용 프로그램에서는 괜찮지 만 광범위한 청중을위한 라이브러리에서는 사용하지 마십시오. 일부 시스템에서는 사용할 수 없을 수도 있으므로 특정 문자 집합 인코딩을 사용하여 로케일을 요청하지 않는 것이 좋습니다.

  2. 국제화를 위해 타사 라이브러리 중 하나를 사용합니다. 예를 들어 PyICU 는 전체 프로세스에 영향을주지 않고 사용 가능한 모든 로케일을 사용할 수 있습니다 (그리고 로케일을 사용하지 않고 특정 천 단위 구분 기호로 숫자를 구문 분석 할 수도 있습니다).

    NumberFormat.createInstance (Locale ( 'en_US')). parse ( "1,000,000"). getLong ()

  3. "올바른 방법"을 수행하기 위해 타사 라이브러리를 설치할 것이 없다면 고유 한 구문 분석 기능을 작성하십시오. int(data.replace(',', ''))엄격한 유효성 검사가 필요하지 않을 때 처럼 간단 할 수 있습니다 .


쉼표를 빈 문자열로 바꾸고 결과 문자열을 int또는 로 바꿉니다 float.

>>> a = '1,000,000'
>>> int(a.replace(',' , ''))
1000000
>>> float(a.replace(',' , ''))
1000000.0

이것은 작동합니다 :

(더럽지 만 빠른 방법)

>>> a='-1,234,567,89.0123'
>>> "".join(a.split(","))
'-123456789.0123'

수락 된 답변에서 로케일 오류가 발생했지만 핀란드 (Windows XP)에서 다음 변경 사항이 작동합니다.

import locale
locale.setlocale( locale.LC_ALL, 'english_USA' )
print locale.atoi('1,000,000')
# 1000000
print locale.atof('1,000,000.53')
# 1000000.53

나는 이것을 시도했다. 그것은 질문을 넘어선 다 : 당신은 입력을 받는다. 먼저 문자열로 변환됩니다 (예를 들어 Beautiful soup의 목록 인 경우). 그런 다음 int로, 다음으로 부동합니다.

그것은 얻을 수있는 한 멀리갑니다. 최악의 경우 변환되지 않은 모든 것을 문자열로 반환합니다.

def to_normal(soupCell):
''' converts a html cell from beautiful soup to text, then to int, then to float: as far as it gets.
US thousands separators are taken into account.
needs import locale'''

locale.setlocale( locale.LC_ALL, 'english_USA' ) 

output = unicode(soupCell.findAll(text=True)[0].string)
try: 
    return locale.atoi(output)
except ValueError: 
    try: return locale.atof(output)
    except ValueError:
        return output

#python3 tenzin
def changenum(data):
    foo = ""
    for i in list(data):
        if i == ",":
            continue
        else:
            foo += i
    return  float(int(foo))

>>> import locale
>>> locale.setlocale(locale.LC_ALL, "")
'en_US.UTF-8'
>>> print locale.atoi('1,000,000')
1000000
>>> print locale.atof('1,000,000.53')
1000000.53

이것은 미국의 Linux에서 수행됩니다.

참고URL : https://stackoverflow.com/questions/1779288/how-to-convert-a-string-to-a-number-if-it-has-commas-in-it-as-thousands-separato

반응형