Как раздеть и преобразовать строку в число с плавающей точкой (десятичные дроби)? - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь преобразовать строку типа «8 191,55 МБ» в «8191,55» чтобы я мог разделить его на 1024, чтобы получить его в гигабайтах.

Код, который я пытаюсь получить, дает мне "819155" вместо "8191.55"

Код:

TotalRAM = dfHandler['Total Physical Memory'].values[0]
TotalRAM = (int)(''.join(i for i in TotalRAM if i.isdigit()))

Ответы [ 5 ]

3 голосов
/ 23 апреля 2019

Используйте replace(), чтобы избавиться от значений запятой, и используйте split(), чтобы разбить его на части.Функция разделения также избавляет от начального и конечного пробелов.

RAM = ' 8,191.55 MB '
ram_in_MB = float(RAM.replace(',','').split()[0])
print(ram_in_MB)
# 8191.55
1 голос
/ 23 апреля 2019

Я бы использовал регулярные выражения (re), чтобы извлечь числовую часть вашей строки.Он получит числа (d +) и десятичные дроби (.).

import re
num = re.findall("(\d+(?:\.\d+)?)", "8,191.55 MB")
print(float(''.join(num)))

результат:

8191.55
1 голос
/ 23 апреля 2019
TotalRAM = dfHandler['Total Physical Memory'].values[0]    
TotalRAM = float(TotalRAM.replace(',', '').replace(' MB', ''))
TotalRAMGb = TotalRam / 1024
1 голос
/ 23 апреля 2019

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

TotalRAM = dfHandler['Total Physical Memory'].values[0]
TotalRAM = float(''.join(i for i in TotalRAM if (i.isdigit() or i == ".")))
0 голосов
/ 23 апреля 2019

Как насчет более локализованного подхода:

from locale import setlocale, LC_NUMERIC, atof
setlocale(LC_NUMERIC, '')

# ...

TotalRAM = dfHandler['Total Physical Memory'].values[0]
TotalRAM = atof(TotalRAM.split()[0])
...