Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 9, 2017 11:13:35

megafox
Зарегистрирован: 2017-09-18
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование числа с запятой

Доброе время!
Есть строки с числами 2095,51 209,56 1885,95. Чтобы преобразовать их во float необходимо запятую изменить на точку. Подскажите пожалуйста оптимальное решение. подозреваю, что через format, но так и не понял.

Офлайн

#2 Ноя. 9, 2017 11:19:06

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2832
Репутация: +  186  -
Профиль   Отправить e-mail  

Преобразование числа с запятой

 >>> "2095,51".replace(",", ".")
'2095.51'



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Ноя. 9, 2017 11:42:32

megafox
Зарегистрирован: 2017-09-18
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование числа с запятой

Как можно оптимизировать код в первых трех строках, даже мне глаз режет

a='Абонентская плата L 500 + 1838,71 0,05 1654,84'.split() #будут даны строки, которые нужно отфильтровать по числу в середине, в этом случае '0,05'
b=a[::-1] #начало у строк разное, единственное, что объединяет, это то, что нужное число в предпоследней подстроке.
c=str(b[1]).replace(',','.')#чтобы применить replace для дальнейшего преобразования во float нужно из list перевести в str.
if float(c)!=0:
print('Число')
else:
print('Ноль')

Отредактировано megafox (Ноя. 9, 2017 11:49:35)

Офлайн

#4 Ноя. 9, 2017 11:43:27

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Преобразование числа с запятой

[code python]Your code here....[/code]



Отредактировано FishHook (Ноя. 9, 2017 11:43:43)

Офлайн

#5 Ноя. 9, 2017 13:32:48

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Преобразование числа с запятой

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

 >>> a='Абонентская плата L 500 + 1838,71 0,05 1654,84' .replace(',','.').split()
>>> print(a)
['Абонентская', 'плата', 'L', '500', '+', '1838.71', '0.05', '1654.84']
а если вам нужны в списке нужны только числа то можно отфильтровать остальное на стадии его создания

Офлайн

#6 Ноя. 10, 2017 14:27:48

megafox
Зарегистрирован: 2017-09-18
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование числа с запятой

Очередной привет )
Продолжу здесь, чтобы не спамить.
Задача: есть файл, разделенный на блоки пустой строкой, каждый из них начинается словом “Абонентский номер” и заканчивается “Итого”. Задача пробежаться по строкам и вытащить из них значения, создав второй файл с данными Абонентский номер xxx.
Натолкните на мысль пожалуйста как сделать так, чтобы при нахождении слова Абонентский начиналась обработка блока до слова Итого или пустой строки, происходила запись в файл и начиналась обработка следующего блока.
пример блока:
По услугам в соответствии с тарифным планом “Фирменный Универсальный”
Абонентский номер +7XXXXXXXXXX
Безлимитный внутри сети лайт() 81
Входящие вызовы (Остальные)( мин) 1,15 0
Входящие вызовы (С мобильного)( мин) 84,10 0
Опция Безлимитный интернет( Мб) 167,4
Итого 307,97


Офлайн

#7 Ноя. 10, 2017 15:54:26

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Преобразование числа с запятой

как-то так

 block_begin = "Абонентский номер"
block_end = "Итого"
flag = 0 #1 - блок открыт,2 - блок закрыт
f_name = 'tmp.txt'
tmp = []
with open(f_name) as f:
    for line in f:
        if line.startswith(block_begin): flag = 1
        if line.startswith(block_end): flag = 2
        if flag == 1:
            tmp.append(line)
        if flag == 2:
            tmp.append(line)
            print(tmp)
            tmp = []
            flag = 0

Отредактировано vic57 (Ноя. 10, 2017 17:22:26)

Офлайн

#8 Ноя. 10, 2017 17:21:18

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Преобразование числа с запятой

я думаю уже блоки сами сможете обработать. как пример блоки отличаются номером:

 with open('test.txt') as fil:
    for i,x in enumerate(' '.join([i.strip() if i !='\n' else '*' for i in fil.readlines()]).split('*')):
        print('блок {}\n'.format(i),x)
блок 0
 Абонентский номер +7XXXXXXXX31 Безлимитный внутри сети лайт() 81 Входящие вызовы (Остальные)( мин) 1,15 0 Входящие вызовы (С мобильного)( мин) 84,10 0 Опция Безлимитный интернет( Мб) 167,4 Итого 307,97 
блок 1
  Абонентский номер +7XXXXXXXX45 Безлимитный внутри сети лайт() 81 Входящие вызовы (Остальные)( мин) 1,15 0 Входящие вызовы (С мобильного)( мин) 84,10 0 Опция Безлимитный интернет( Мб) 167,4 Итого 307,97 
блок 2
  Абонентский номер +7XXXXXXXX55 Безлимитный внутри сети лайт() 81 Входящие вызовы (Остальные)( мин) 1,15 0 Входящие вызовы (С мобильного)( мин) 84,10 0 Опция Безлимитный интернет( Мб) 167,4 Итого 307,97

Офлайн

#9 Ноя. 14, 2017 00:36:21

Vladimirv
Зарегистрирован: 2013-03-22
Сообщения: 108
Репутация: +  7  -
Профиль   Отправить e-mail  

Преобразование числа с запятой

marvellik код супер)

Офлайн

#10 Ноя. 14, 2017 06:53:09

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Преобразование числа с запятой

megafox
Есть строки с числами 2095,51
megafox
Задача: есть файл, разделенный на блоки пустой строкой,
Задачи такого типа возникают когда вы не с того конца пытаетесь автоматизировать процесс.
Наверняка есть база данных из которой получены эти файлы. Во многих случаях проще напрямую из нее данные запросить а не лепить преобразовалки из базы в текст из текста в ваши данные. Иногда по соображениям безопасности вам не дают доступ к базе, но тогда практически наверняка можно выгружать данные в одном из СТАНДАРТНЫХ форматов. Например csv, json. Если выгрузите данные в этих форматах, чтение данных любой сложности станет кодом в одну или две строчки.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version