Вопрос-Ответ

How to convert a string to a number if it has commas in it as thousands separators?

Как преобразовать строку в число, если в ней есть запятые в качестве разделителей тысяч?

У меня есть строка, представляющая число, которое использует запятые для разделения тысяч. Как я могу преобразовать это в число на python?

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

Генерирует ValueError.

Я мог бы заменить запятые пустыми строками, прежде чем пытаться преобразовать ее, но это почему-то кажется неправильным. Есть ли способ лучше?


Для получения float значений см. Как я могу преобразовать строку с точкой и запятой в число с плавающей точкой в Python, хотя методы, по сути, те же.

Переведено автоматически
Ответ 1
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
Ответ 2

Существует несколько способов разбора чисел с разделителями тысяч. И я сомневаюсь, что способ, описанный @unutbu, является лучшим во всех случаях. Вот почему я перечисляю и другие способы.


  1. Правильное место для вызова setlocale() находится в __main__ модуле. Это глобальная настройка, которая повлияет на всю программу и даже на расширения C (хотя обратите внимание, что параметр LC_NUMERIC устанавливается не на системном уровне, а эмулируется Python). Прочитайте предостережения в документации и дважды подумайте, прежде чем идти этим путем. Вероятно, это нормально в одном приложении, но никогда не используйте это в библиотеках для широкой аудитории. Вероятно, вам следует избегать запроса локали с какой-либо конкретной кодировкой кодировки, поскольку она может быть недоступна в некоторых системах.


  2. Используйте одну из сторонних библиотек для интернационализации. Например, PyICU позволяет использовать любую доступную локаль, не влияя на весь процесс (и даже разбирать числа с определенными разделителями тысяч без использования локалей):


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


  3. Напишите свою собственную функцию синтаксического анализа, если у вас ее нет, что установить сторонние библиотеки, чтобы сделать это "правильно". Это может быть так же просто, как int(data.replace(',', '')) когда строгая проверка не требуется.


Ответ 3

Замените запятые пустыми строками и превратите результирующую строку в int или a float.

>>> a = '1,000,000'
>>> int(a.replace(',' , ''))
1000000
>>> float(a.replace(',' , ''))
1000000.0
Ответ 4

Я получил ошибку локализации из принятого ответа, но следующее изменение работает здесь, в Финляндии (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
python