Не получается в Python конвертировать string в float

Добрый день! Прошу помощи: Столкнулся с проблемой конвертации string в float:

import codecs

f = codecs.open ("test.txt", 'r', encoding='cp866')
for line in f:
    pkp = 1
    for lk in range (0, len (line), 1):
        if line[lk] == '0' or line[lk] == '1' or line[lk] == '2' or line[lk] == '3' or line[lk] == '4' or line[lk] == '5' or line[lk] == '6' or line[lk] == '7' or line[lk] == '8' or \
        line[lk] == '9' or line[lk] == '.' or line[lk] == ',' or line[lk] == '-' or line[lk] == '\n' or line[lk] == ' ' or line[lk] == '  ':  # or line[lk:(lk+2)] != '--' or line[lk] != '#':
                            pkp += 1
    if pkp == len (line):
        text = line
        nev_text = ''
        lk = ''
        for i, x in enumerate (text):
            if x == ' ':
                if lk != '':
                    if lk != ' ':
                        nev_text += ','
                    else:
                        nev_text += x
            else:
                nev_text += x  # F
            lk = x
        if len (nev_text) > 2:
            nev_text1 = list (map(float, nev_text)) # Здесь программа вылетает, не может конвертировать string в float
            lj = 0.00, 10000.00
            new_list = list(map(lambda m, f: m + f, nev_text1, lj))
            print(new_list)
f.close ()
3

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

5
Е
  • Қаз. 19, 2019, 12:07 Т.Ж.

test.txt test.txt
Файл test.txt:

    Evgenii Legotckoi
    • Қаз. 19, 2019, 12:30 Т.Ж.

    Добрый день.

    У вас там пробелы находятся в тексте, поэтому и не может сконвертировать. фукция map применяет float ко все символам в каждой строке. В том числе и к символам пробела. А пробел вы не можете преобразовать во float, поэтому и вылетает. В качестве символов в той строке могут быть только числа, и точки. Даже запятые являеются невалидными символами.

      Спасибо Евгений за очередную подсказку! Всё-таки решилась проблема)))

      import codecs
      
      f = codecs.open ("1test_BK.txt", 'r', encoding='cp866')
      for line in f:
          pkp = 1
          for lk in range (0, len (line), 1):
              if line[lk] == '0' or line[lk] == '1' or line[lk] == '2' or line[lk] == '3' or line[lk] == '4' or line[lk] == '5' or line[lk] == '6' or line[lk] == '7' or line[lk] == '8' or \
              line[lk] == '9' or line[lk] == '.' or line[lk] == ',' or line[lk] == '-' or line[lk] == '\n' or line[lk] == ' ' or line[lk] == '  ':  
                                  pkp += 1
          if pkp == len (line):
              text = line
              nev_text = ''
              lk = ''
              for i, x in enumerate (text):
                  if x == ' ':
                      if lk != '':
                          if lk != ' ':
                              nev_text += ','
                          else:
                              nev_text += x
                  else:
                      nev_text += x  # F
                  lk = x
              if len (nev_text) > 2:
                  nev_text1 = nev_text.split(',')
                  nev_text3 = ''
                  nev_text4 = ''
                  nev_text5 = ''
                  for jw in range (0, len(nev_text1)-1, 1):
                      if jw % 2 != 0:
                          nev_text2 = float(nev_text1[jw])
                          nev_text2 += 10000.00
                          nev_text3 = str(nev_text2)
                          print (nev_text5, nev_text3)
                      else:
                          nev_text4 = nev_text1[jw]
                          nev_text5 = str(nev_text4)
      f.close ()
      
        O
        • Қаз. 22, 2019, 10:48 Т.Ж.

        По моему, алгоритм перебора символов в 6-8 строках жутко тормознутый.
        Зачем все время операция "or"?
        Если очередной символ удовлетворяет условию, то дальнейшая "or" уже смысла не имеет и надо идти на начало цикла.

          Е
          • Қаз. 22, 2019, 11:03 Т.Ж.

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

            Пікірлер

            Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
            Кіріңіз немесе Тіркеліңіз