Е
18 октября 2019 г. 15:44

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

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

  1. import codecs
  2.  
  3. f = codecs.open ("test.txt", 'r', encoding='cp866')
  4. for line in f:
  5. pkp = 1
  6. for lk in range (0, len (line), 1):
  7. 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 \
  8. 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] != '#':
  9. pkp += 1
  10. if pkp == len (line):
  11. text = line
  12. nev_text = ''
  13. lk = ''
  14. for i, x in enumerate (text):
  15. if x == ' ':
  16. if lk != '':
  17. if lk != ' ':
  18. nev_text += ','
  19. else:
  20. nev_text += x
  21. else:
  22. nev_text += x # F
  23. lk = x
  24. if len (nev_text) > 2:
  25. nev_text1 = list (map(float, nev_text)) # Здесь программа вылетает, не может конвертировать string в float
  26. lj = 0.00, 10000.00
  27. new_list = list(map(lambda m, f: m + f, nev_text1, lj))
  28. print(new_list)
  29. f.close ()
3

Вам это нравится? Поделитесь в социальных сетях!

5
Е
  • 19 октября 2019 г. 0:07

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

    Evgenii Legotckoi
    • 19 октября 2019 г. 0:30

    Добрый день.

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

      Е
      • 19 октября 2019 г. 17:27

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

      1. import codecs
      2.  
      3. f = codecs.open ("1test_BK.txt", 'r', encoding='cp866')
      4. for line in f:
      5. pkp = 1
      6. for lk in range (0, len (line), 1):
      7. 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 \
      8. line[lk] == '9' or line[lk] == '.' or line[lk] == ',' or line[lk] == '-' or line[lk] == '\n' or line[lk] == ' ' or line[lk] == ' ':
      9. pkp += 1
      10. if pkp == len (line):
      11. text = line
      12. nev_text = ''
      13. lk = ''
      14. for i, x in enumerate (text):
      15. if x == ' ':
      16. if lk != '':
      17. if lk != ' ':
      18. nev_text += ','
      19. else:
      20. nev_text += x
      21. else:
      22. nev_text += x # F
      23. lk = x
      24. if len (nev_text) > 2:
      25. nev_text1 = nev_text.split(',')
      26. nev_text3 = ''
      27. nev_text4 = ''
      28. nev_text5 = ''
      29. for jw in range (0, len(nev_text1)-1, 1):
      30. if jw % 2 != 0:
      31. nev_text2 = float(nev_text1[jw])
      32. nev_text2 += 10000.00
      33. nev_text3 = str(nev_text2)
      34. print (nev_text5, nev_text3)
      35. else:
      36. nev_text4 = nev_text1[jw]
      37. nev_text5 = str(nev_text4)
      38. f.close ()
        O
        • 22 октября 2019 г. 10:48

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

          Е
          • 22 октября 2019 г. 11:03

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

            Комментарии

            Только авторизованные пользователи могут публиковать комментарии.
            Пожалуйста, авторизуйтесь или зарегистрируйтесь