Вы не можете просто конвертировать длинную строку чисел в числа с плавающей точкой.Ваше исключение показывает, что строка состоит из более чем одного числа:
'0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n'
Далее, даже если бы это сработало, выражение data(float(line))
просит Python рассматривать data
как функцию или класс (a вызываемая ).Однако объекты списка не могут быть вызваны.
Вам необходимо разбить строку на отдельные числа и преобразовать эти отдельные части в числа с плавающей запятой.Если вы хотите добавить каждую строку текста в отдельный список, вы можете использовать:
data.append([float(part) for part in line.split()])
Однако было бы более эффективно, если бы модуль csv
делал этодля вас он может преобразовывать данные в числа с плавающей точкой, считывая данные и разбивая строки:
import csv
with open('plenty.data', 'r', newline='') as plentydata:
reader = csv.reader(plentydata, delimiter=' ', quoting=csv.QUOTE_NONNUMERIC)
data = list(reader)
Конфигурация quoting=csv.QUOTE_NONNUMERIC
для считывателя CSV позволяет читателю выводить числа с плавающей запятой.
Если вам не нужен произвольный доступ к данным (если вы можете обрабатывать числа построчно и не нужно ссылаться на отдельные строки по индексу), вам не нужно читать весь файл вобъем памяти.Просто зациклите читатель и обработайте каждую строку по мере необходимости:
with open('plenty.data', 'r', newline='') as plentydata:
reader = csv.reader(plentydata, delimiter=' ', quoting=csv.QUOTE_NONNUMERIC)
for row in reader:
# do something with a single row of floats