Форум сайта python.su
Доброе время!
Есть строки с числами 2095,51 209,56 1885,95. Чтобы преобразовать их во float необходимо запятую изменить на точку. Подскажите пожалуйста оптимальное решение. подозреваю, что через format, но так и не понял.
Офлайн
>>> "2095,51".replace(",", ".") '2095.51'
Офлайн
Как можно оптимизировать код в первых трех строках, даже мне глаз режет
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)
Офлайн
[code python]Your code here....[/code]
Отредактировано FishHook (Ноя. 9, 2017 11:43:43)
Офлайн
megafox а что вам мешает сразу заменить , на. и уже получить готовые для обработки данные
>>> a='Абонентская плата L 500 + 1838,71 0,05 1654,84' .replace(',','.').split() >>> print(a) ['Абонентская', 'плата', 'L', '500', '+', '1838.71', '0.05', '1654.84']
Офлайн
Очередной привет )
Продолжу здесь, чтобы не спамить.
Задача: есть файл, разделенный на блоки пустой строкой, каждый из них начинается словом “Абонентский номер” и заканчивается “Итого”. Задача пробежаться по строкам и вытащить из них значения, создав второй файл с данными Абонентский номер xxx.
Натолкните на мысль пожалуйста как сделать так, чтобы при нахождении слова Абонентский начиналась обработка блока до слова Итого или пустой строки, происходила запись в файл и начиналась обработка следующего блока.
пример блока:
По услугам в соответствии с тарифным планом “Фирменный Универсальный”
Абонентский номер +7XXXXXXXXXX
Безлимитный внутри сети лайт() 81
Входящие вызовы (Остальные)( мин) 1,15 0
Входящие вызовы (С мобильного)( мин) 84,10 0
Опция Безлимитный интернет( Мб) 167,4
Итого 307,97
Офлайн
как-то так
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)
Офлайн
я думаю уже блоки сами сможете обработать. как пример блоки отличаются номером:
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
Офлайн
marvellik код супер)
Офлайн
megafox
Есть строки с числами 2095,51
megafoxЗадачи такого типа возникают когда вы не с того конца пытаетесь автоматизировать процесс.
Задача: есть файл, разделенный на блоки пустой строкой,
Офлайн