文本文件中的python浮动列表

文本文件中的python浮动列表,python,python-2.7,Python,Python 2.7,我正在尝试使用以下代码从文本文件创建浮动列表: 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) 但是输出很简单:[] 有人能帮忙吗

我正在尝试使用以下代码从文本文件创建浮动列表:

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

检查数据文件中第1行的

应该是这样的:

for line1 in exam_data :

对于检查数据文件中的第1行,您引用了错误的对象:

应该是这样的:

for line1 in exam_data :

您引用了错误的对象

代码中实际上有两个问题:

  • 第一个问题是您实际上正在读取文件两次。执行for循环时,一个时间行2(
    检查数据文件.readlines()
    )和第二个时间行5。一个文件不能读取两次。以获取更多信息

  • 第二个问题是,
    line1
    当前是文件中的一整行(在您的情况下是一系列单独的浮动),而不是您所期望的单个浮动。这就是为什么会出现
    无效文本
    错误的原因。您必须将其拆分为单独的数字,以便对其调用
    float
    。这就是为什么必须调用字符串的方法

请尝试以下方法:

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]

实际上,代码中有两个问题:

  • 第一个问题是您实际上正在读取文件两次。执行for循环时,一个时间行2(
    检查数据文件.readlines()
    )和第二个时间行5。一个文件不能读取两次。以获取更多信息

  • 第二个问题是,
    line1
    当前是文件中的一整行(在您的情况下是一系列单独的浮动),而不是您所期望的单个浮动。这就是为什么会出现
    无效文本
    错误的原因。您必须将其拆分为单独的数字,以便对其调用
    float
    。这就是为什么必须调用字符串的方法

请尝试以下方法:

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]

选择要在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)

上下文处理程序(带有语法)将确保您在处理完文件后关闭它

选择要在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)

上下文处理程序(带有语法)将确保您在处理完文件后关闭它

由于类似文件的对象是一个iterable,所以您可以只使用
映射

with open('exam_data.txt','r') as f:
    exam_data = map(float, f)

由于类似文件的对象是一个iterable,所以您可以只使用
map

with open('exam_data.txt','r') as f:
    exam_data = map(float, f)

为什么不使用literal\u evaln-(更易于使用)

只需使用literal\u 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()

为什么不使用literal\u evaln-(更易于使用)

只需使用literal\u 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()
这个答案是相关的。 下面是我使用的一个示例:

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()
这个答案是相关的。 下面是我使用的一个示例:

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.141592654 2.718281828 1.414213562 0.707106781 0.017453293该内容在输入文件中是如何排列的?都在一条线上,用空格隔开?每一个数字都在一行吗?如果是后者,文件中是否有不包含数字的行(例如,开头或结尾的空行)?每个数字都在单独的行上,但没有空白lines@Dan1,您在代码中做了哪些更改,使其停止输出
[]
,并开始引发错误?我非常、非常、非常确定,“无论您做了什么更改”,您都不会收到此错误消息。这是一个疯狂的说法。共享您输入文件的内容3.141592654 2.718281828 1.414213562 0.707106781 0.017453293该内容在输入文件中是如何排列的?都在一条线上,用空格隔开?每一个数字都在一行吗?如果是后者,文件中是否有不包含数字的行(例如,开头或结尾的空行)?每个数字都在单独的行上,但没有空白lines@Dan1,您在代码中做了哪些更改,使其停止输出
[]
,并开始引发错误?我非常,非常,非常确定你不会收到这个错误消息“不管你做了什么改变。”这是一个疯狂的说法。尽管它仍然有效。在Python中,迭代文件对象实际上是读取行的推荐方法。@pzp但在
readlines
之后,指针位于file@Akhil不过,泰伊尔的回答仍然是错误的
readlines()
不会去除空白(即换行符),因此当OP尝试转换为浮点时仍然会出现错误。@pzp:将字符串转换为浮点或整型时,尾随或前导空白(包括换行符)没有问题。@pzp感谢您的通知,它仍然可以工作。在Python中,迭代文件对象实际上是读取行的推荐方法。@pzp但在
readlines
之后,指针位于file@Akhil不过,泰伊尔的回答仍然是错误的
readlines()
不会去除空白(即换行符),因此OP尝试转换为浮点数时仍然会出现错误。@pzp:尾随或前导空白(包括换行符)没有问题将字符串转换为浮点或整数时。@pzp感谢notifying@Dan1:您能复制粘贴完整的回溯吗?回溯(最近一次调用):文件“/Users/Aliber/Desktop/CSC_108/Python lab b/data3.py”,第4行,第1行=float(第1行)值错误:float()的文本无效: 3.141592654 2.718281828 1.414213562 0.707106781 0.017453293@Dan1:请参阅我编辑的帖子:)我现在将对我所做的更改进行解释made@Controll,我不明白你的道理。你说,“第二个问题是,
lin