Задача -- разбить строку так, чтобы в получившимся списке были данные за один год (2014, 2015 и т.д.). С первой строкой всё просто - .split() строки по пробелам и берем значения по индексам. А вот со второй строкой будет ошибка, т.к., например, в случае с 2016 годом закрался лишний пробел (выделил жирным эти места) и мы вместо 1,09 получаем 1 и .09, вместо 3,44 получаем 3 и .44 . Можно ли как-то избежать этого при обработке строк? Этот коварный пробел может появится в рандомных местах, кроме значения года...
И как ты думаешь определять случаи где просто пробел забыт, а где имеется ввиду нуль?
.67 1 .09 .85 .83 3 .44
Если только целых чисел в строке быть не может
Я бы посмотрел в сторону того, что split даёт на вывод тупль стрингов, и у ошибочных значений i[z][0] == '.'
А потом join((i[z-1], i[z])) с сепаратором ""(то есть без =) )
Спасибо всем откликнувшимся.. В принципе я уже написал жуткий костыль с разбитием строки в список и перебором всех элементов с проверкой на наличие точки и соответствие значению года...
# l -- это список из входящей строки с разбитием по пробелу
for year in years:
for i, k in enumerate(l):
if l[i] == year:
yr_earn_data['{}'.format(year)] = {}
if '.' in l[i + 1] and l[i+1] not in years:
yr_earn_data['{}'.format(year)]['q1'] = float(l[i + 1])
else:
l[i + 1] = l[i + 1] + l[i + 2]
l.remove(l[i+2])
if '.' in l[i + 2] and l[i+2] not in years:
yr_earn_data['{}'.format(year)]['q2'] = float(l[i + 2])
else:
l[i + 2] = l[i + 2] + l[i + 3]
l.remove(l[i + 3])
if '.' in l[i + 3] and l[i + 3] not in years:
yr_earn_data['{}'.format(year)]['q3'] = float(l[i + 3])
else:
l[i + 3] = l[i + 3] + l[i + 4]
l.remove(l[i + 4])
if '.' in l[i + 4] and l[i + 4] not in years:
yr_earn_data['{}'.format(year)]['q4'] = float(l[i + 4])
else:
l[i + 4] = l[i + 4] + l[i + 5]
l.remove(l[i + 5])
if '.' in l[i + 5] and l[i + 5] not in years:
yr_earn_data['{}'.format(year)]['q_total'] = float(l[i + 5])
else:
l[i + 5] = l[i + 5] + l[i + 6]
l.remove(l[i + 6])
на выходе получаем новый список с уже убранными лишними пробелами в значениях