我正在尝试使用以下代码从文本文件创建浮动列表:
exam_data_file = open('exam_data.txt','r')
exam_data = exam_data_file.readlines()
exam_data1 = []
for line1 in exam_data_file:
line1 = float(line1)
exam_data1.append(line1)
print(exam_data1)
但输出只是:[]
有人可以帮忙吗?!
现在我收到此错误消息,无论我做出哪些更改:
line1 = float(line1)
ValueError: invalid literal for float(): 3.141592654
2.718281828
1.414213562
0.707106781
0.017453293
答案 0 :(得分:1)
for line1 in exam_data_file:
应该是这样的:
for line1 in exam_data :
你指的是一个错误的对象
答案 1 :(得分:1)
为什么不使用 literal_eval n-(更易于使用)
您只需使用 literal_eval
即可阅读和打印简单列表或多维列表from ast import literal_eval
f=open("demofile.txt",'r')
for line in f:
new_list = literal_eval(line)
print(new_list)
f.close()
答案 2 :(得分:1)
https://stackoverflow.com/a/59717679/10151945 这个答案是不相关的。 这是我做过的一个例子:
from ast import literal_eval
file=open("student_list.txt",'r')
for student in file:
student_list_final = literal_eval(student)
print(student_list_final)
file.close()
答案 3 :(得分:0)
您的代码实际上存在两个问题:
第一个问题是您实际上正在阅读该文件两次。执行for循环时,一个时间线2(exam_data_file.readlines()
)和一个第二时间线5。您无法两次读取文件。详情请见see this post。
第二个问题是line1
当前是您文件中的整行(在您的情况下是一系列单独的浮点数),而不是您预期的单个浮点数。这就是你得到Invalid literal
错误的原因。您必须将其拆分为单独的数字才能在其上调用float
。这就是你必须调用字符串的split
方法的原因。
请改为尝试:
exam_data_file = open('exam_data.txt','r')
exam_data1 = []
for line in exam_data_file:
exam_data1.extend([float(i) for i in line.split()])
print(exam_data1)
输出:
[3.141592654, 2.718281828, 1.414213562, 0.707106781, 0.017453293]
答案 4 :(得分:0)
选择错误以在for循环中进行迭代时,您出错了。
for line1 in exam_data: # not the file!
line1 = float(line1)
exam_data1.append(line1)
这可以通过
进一步改进exam_data = []
with open('exam_data.txt','r') as open_file:
for line1 in open_file:
line1 = float(line1)
exam_data.append(line1)
print(exam_data)
上下文处理程序(带语法)将确保在处理完文件后关闭该文件!
答案 5 :(得分:0)
由于类似文件的对象是可迭代的,因此您只需使用map
。
with open('exam_data.txt','r') as f:
exam_data = map(float, f)