我一般是Python 3和python的新手。我被设置为编写一个函数,该函数读取一个数据集(plenty.data),然后将该数据转换为浮点数。
我设法编写了代码来读取数据集,但是我真的很努力地将其转换为浮点数。
data=[]
inFile = open('plenty.data','r')
for line in inFile.readlines():
data.append(line)
data(float(line))
目前这是我转换为浮点数所需要的,但是当我运行它时,我收到一条错误消息,提示
ValueError Traceback (most recent call last)
<ipython-input-6-f32b7e41d5ed> in <module>()
3 for line in inFile.readlines():
4 data.append(line)
----> 5 data(float(line))
6
ValueError: could not convert string to float: '0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0\n'
有人告诉我要使用循环,但我仍在努力做到这一点。
任何帮助将不胜感激!
答案 0 :(得分:3)
您不能只将一长串数字转换为浮点数。您的例外情况显示该行包含多个数字:
'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
视为函数或类(可调用)。列表对象不能被调用。
您需要将行拆分为单独的数字,然后将这些单独的部分转换为浮点数。如果要将文本的每一行附加为单独的列表,可以使用:
data.append([float(part) for part in line.split()])
但是,csv
module为您执行此操作效率更高,它可以在读取数据并分割行时将数据转换为浮点数:
import csv
with open('plenty.data', 'r', newline='') as plentydata:
reader = csv.reader(plentydata, delimiter=' ', quoting=csv.QUOTE_NONNUMERIC)
data = list(reader)
CSV阅读器的quoting=csv.QUOTE_NONNUMERIC
配置使阅读器输出浮点数。
如果您不需要随机访问数据(如果您可以逐行处理数字并且不需要按索引引用单个行),则不必将整个文件读入记忆。只需遍历阅读器并根据需要处理每一行:
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