쉼표를 사용하여 수천을 구분하는 숫자를 나타내는 문자열이 있습니다. 어떻게 파이썬으로 숫자로 변환 할 수 있습니까?쉼표가 천 단위 구분 기호로되어있는 경우 어떻게 파이썬을 사용하여 문자열을 숫자로 변환합니까?
>>> int("1,000,000")
ValueError
을 생성합니다.
변환을 시도하기 전에 쉼표를 빈 문자열로 바꿀 수는 있지만 어떻게 든 잘못 생각합니다. 더 좋은 방법이 있습니까?
쉼표를 사용하여 수천을 구분하는 숫자를 나타내는 문자열이 있습니다. 어떻게 파이썬으로 숫자로 변환 할 수 있습니까?쉼표가 천 단위 구분 기호로되어있는 경우 어떻게 파이썬을 사용하여 문자열을 숫자로 변환합니까?
>>> 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
천 단위 구분 기호로 숫자를 구문 분석하는 데는 여러 가지 방법이 있습니다. 그리고 우분투가 묘사 한 방식이 모든 경우에서 최고라고는 생각하지 않습니다. 그래서 나는 다른 방법들도 열거하고있다. setlocale()
에게 전화
적절한 장소 __main__
모듈이다. 전역 설정이며 전체 프로그램과 심지어 C 확장에도 영향을줍니다 (LC_NUMERIC 설정은 시스템 수준에서 설정되지 않지만 파이썬에서 에뮬레이트됩니다). caveats in documentation을 읽고이 방법을 사용하기 전에 두 번 생각하십시오. 아마 단일 응용 프로그램에서는 괜찮 겠지만 많은 사람들을 위해 라이브러리에서는 사용하지 마십시오. 일부 시스템에서는 사용할 수 없으므로 특정 charset 인코딩을 사용하여 로케일을 요청하지 않을 수도 있습니다.
국제화를 위해 제 3 자 라이브러리 중 하나를 사용하십시오. 예를 들어 PyICU을 사용하면 전체 프로세스에 영향을 미치는 사용 가능한 로켈을 사용할 수 있으며 로케일을 사용하지 않고 특정 천 단위 구분 기호로 숫자를 파싱 할 수도 있습니다.
NumberFormat.createInstance (Locale ('en_US')). parse ("1,000,000").
제 3 자 라이브러리를 설치하는 것이 "올바른 방법"이 아닌 경우 사용자 고유의 구문 분석 기능을 작성하십시오. 엄격한 유효성 검사가 필요하지 않은 경우 int(data.replace(',', ''))
과 같이 간단 할 수 있습니다.
+1. 이 문제가 생겼을 때 그게 전부 였어. –
오타를 수정하기 위해 편집되었습니다 ('setlocate'는'setlocale'이어야합니다). 또한, +1. –
뻔뻔한 자기 승진, 나는 세 번째 옵션을 사용했습니다. 그러므로 누군가 관심이 있다면 [**이 질문/답변 **] (https://stackoverflow.com/questions/48843193/convert-a-number-using-atof/48845430#48845430) – Jan
내가 허용 대답에서 로케일 오류를 얻었으나, 다음과 같은 변화는 핀란드 (윈도우 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
이 작동 :
(A 더러운하지만 빠른 방법)
>>> a='-1,234,567,89.0123'
>>> "".join(a.split(","))
'-123456789.0123'
빈 문자열로 쉼표를 바꾸고 결과 문자열을 int
또는 float
.
>>> a = '1,000,000'
>>> int(a.replace(',' , ''))
1000000
>>> float(a.replace(',' , ''))
1000000.0
을 참조하십시오. OP 질문을 다시 읽으십시오. 그가 말한 곳에서 특히 : "변환하기 전에 빈 문자열로 쉼표를 대체 할 수 있지만 어떻게 든 잘못 생각합니다. 더 좋은 방법이 있습니까?" – joaquin
>>> 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
. - 설레임
#python3 tenzin
def changenum(data):
foo = ""
for i in list(data):
if i == ",":
continue
else:
foo += i
return float(int(foo))
나는 이것을 시도했다. 질문을 조금 넘어갑니다. 입력 사항이 있습니다. 그것은 먼저 문자열로 변환 될 것입니다 (예를 들어 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
어떻게 생각하세요? 이 기능은 이유가 있습니다. –