ValueError: не удалось преобразовать строку в float из файла, который представляет собой список, записанный в файле - PullRequest
0 голосов
/ 14 июля 2020

Я пишу программу для вычисления суммы квадратов списка строк, представляющих собой числа, считанные из файла. Функции работают, когда не используются с файлом, что меня еще больше сбивает.

Файл представляет собой простой список [«1», «2», «3»]

После запуска программа, я получаю сообщение об ошибке:

ValueError: не удалось преобразовать строку в число с плавающей запятой: '["1", "2", "3"]'

Вот код:

def toNumbers(strList):
    newList = []
    for i in strList:
        i = float(i)
        newList.append(i)
    return newList

def squareEach(nums):
    newList = []
    for i in nums:
        i = i**2
        newList.append(i)
    return newList

def sumList(nums):
    count = 0
    for i in nums:
        count += i
    return count

def main():
    file = open("listOfSquares", "r")
    f = file.readlines()
    print(sumList(squareEach(toNumbers(f))))
 
main()

Ответы [ 3 ]

0 голосов
/ 14 июля 2020

Вы получаете сообщение об ошибке, потому что getLines возвращает список строк, поэтому, когда вы перебираете значения в методе toNumbers, вы фактически перебираете список с одним элементом - всей первой строкой из файла - вместо отдельных чисел.

Чтобы перебирать числа, вы должны сначала взять эту первую строку и разделить ее на отдельные числа, например, используя метод разделения https://www.w3schools.com/python/ref_string_split.asp

0 голосов
/ 14 июля 2020

Если вы ищете числа в файле, вы должны использовать re, чтобы прочитать "список" ( это фактически строка ). Более того, вы можете найти любое число в этом файле с помощью re.

import re

#this is the pattern for finding numbers in a string
p = re.compile(r"[0.0-9.0]+")

st = '["1", "22.1", "3"]' #the string

nums = p.findall(st) #search for a float number and create a list of ['1','22.1','3']

nums = [float(num) for num in nums] #converte the numbers from str type to float type
0 голосов
/ 14 июля 2020

Это потому, что текстовый файл - это просто текст без переменных. Лучше всего с данным кодом разбить его на [].

f = [''.join(''.join(x.split('[')).split(']')) for x in f]
...