천 단위 구분 기호로 쉼표가있는 경우 문자열을 숫자로 변환하는 방법은 무엇입니까?
수천을 구분하기 위해 쉼표를 사용하는 숫자를 나타내는 문자열이 있습니다. 이것을 파이썬에서 어떻게 숫자로 변환 할 수 있습니까?
>>> 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가 설명하는 방식이 모든 경우에 최고라고 생각하지 않습니다. 그래서 다른 방법도 나열합니다.
호출 할 적절한 장소
setlocale()
는__main__
모듈에 있습니다. 전역 설정이며 전체 프로그램 및 C 확장에도 영향을줍니다 (LC_NUMERIC 설정은 시스템 수준에서 설정되지 않지만 Python에 의해 에뮬레이션 됨). 읽기 설명서에주의 사항을 이 길을 가기 전에 두 번 생각합니다. 단일 응용 프로그램에서는 괜찮지 만 광범위한 청중을위한 라이브러리에서는 사용하지 마십시오. 일부 시스템에서는 사용할 수 없을 수도 있으므로 특정 문자 집합 인코딩을 사용하여 로케일을 요청하지 않는 것이 좋습니다.국제화를 위해 타사 라이브러리 중 하나를 사용합니다. 예를 들어 PyICU 는 전체 프로세스에 영향을주지 않고 사용 가능한 모든 로케일을 사용할 수 있습니다 (그리고 로케일을 사용하지 않고 특정 천 단위 구분 기호로 숫자를 구문 분석 할 수도 있습니다).
NumberFormat.createInstance (Locale ( 'en_US')). parse ( "1,000,000"). getLong ()
"올바른 방법"을 수행하기 위해 타사 라이브러리를 설치할 것이 없다면 고유 한 구문 분석 기능을 작성하십시오.
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에서 수행됩니다.
'Programing' 카테고리의 다른 글
SQL Server에서 십진 열의 정밀도를 어떻게 변경합니까? (0) | 2020.10.19 |
---|---|
IEnumerable.Intersect ()를 사용하여 여러 목록의 교차 (0) | 2020.10.19 |
mailto : (to) 부분이없는 링크를 어떻게 만드나요? (0) | 2020.10.19 |
rspec에서 루비 디버그를 실행 중입니까? (0) | 2020.10.19 |
IntelliJ에서 빌더 패턴 코드 생성 (0) | 2020.10.19 |