如何从文件中读取数字并将其作为浮点存储在列表中?/python

如何从文件中读取数字并将其作为浮点存储在列表中?/python,python,list,floating-point,Python,List,Floating Point,(这是我的第一个问题,如果不太清楚,我道歉) 我有一个文本文件,看起来像这样: 106.33333333333333 200.79263333333 68.214276154075 我想把每个数字放入一个列表中(作为一个浮点数),然后用它来计算平均值、最大值和总和。(平均值(),最大值(),总和()) 我尝试了一些基于类似问题回答的变体:(简化代码) 然后检查一下, print(list) 输出: ValueError: could not convert string to float:

(这是我的第一个问题,如果不太清楚,我道歉)

我有一个文本文件,看起来像这样:

106.33333333333333
200.79263333333
68.214276154075
我想把每个数字放入一个列表中(作为一个浮点数),然后用它来计算平均值、最大值和总和。(平均值(),最大值(),总和())


我尝试了一些基于类似问题回答的变体:(简化代码)

然后检查一下,

print(list)
输出:

ValueError: could not convert string to float: 's'

老实说,我没想到它会奏效,但如果你有任何建议,那就太好了


谢谢。

使用列表理解和
with
语句打开文件:

my_list = my_list + [float(numbers)]
with open('text.txt') as text:
    data = [float(i) for i in text]
然后,您只需调用
数据
列表中的内置方法即可:

max_value = max(data)
sum_value = sum(data)

首先,请注意:正如MattDMo指出的,您希望避免使用内置变量作为变量名。在您的示例中,这是
列表
文件


打开('filename.txt','r')作为数字\u文件:
数字=[数字文件中n的浮点(n)]
打印“编号:%s”%s个编号
数字\u max=max(数字)
打印“最大值:%s”%numbers\u max
数字总和=总和(数字)
打印“总和:%s”%number\u总和
数字\u平均值=数字\u和/浮点数(len(数字))
打印“平均值:%s”%number\u平均值
如果仍然出现此错误:

ValueError: could not convert string to float: 's'
您需要确保文件中的每个项都可以按原样强制转换为浮点。如果要以更具弹性的方式读取文件,请执行以下操作:

numbers = []
with open('filename.txt','r') as numbers_file:
    for line in numbers_file:
        try:
            num = float(line.strip())
            numbers.append(num)
        except ValueError:
            continue
这将确保您只读取文件中的数字行


括号内的代码,
[float(n)表示数字文件中的n]
将在
数字文件
(filename.txt)中的行上迭代,并在构建列表时将每个项转换为
float
。然后将结果列表传递给
extend
,后者更新原始的
number
列表。在一行代码中迭代这样的列表称为

下面是关于
列表
方法的python文档:


不要将Python内置项的名称用作变量。另外,只需使用
list.append(float(numbers))
而不是
list=list+float(numbers)
@MattDMo指的是将“file”和“list”用作变量。文件()文档:列表()文档:是的,很抱歉,我更改了代码,以便对查看器更有意义。菜鸟犯了个明显的错误哈哈。现在更新q。假设显示的代码确实是您运行的代码(是吗?),那么您可能获得您收到的特定错误消息的唯一方法是,您正在读取的文件中是否有一行只包含一个“s”(而没有其他内容)。对于
float()
无法解析的任何行,您都会收到类似的错误消息。了解如何解决此类问题的一个好方法是尝试在流程的每一步打印变量,看看您对应该发生的情况的理解与实际发生的情况不符。这是一种更像蟒蛇的方式。这与我的答案几乎相同。扩展一个空列表是没有意义的。正如我所做的那样,把清单分配给理解题。为什么首先要做数字?你可以在里面做
numbers=
。这个操作使得脚本中似乎有一个持久列表,可以从多个文件中更新,所以我没有做任何其他假设。
n.strip().isdigit()
12345
是正确的,但对
123.45
不是。我没有投你反对票;然而,这是一个很好的回答,“如何用惯用Python编写代码”,但它根本没有解决OP的问题。如果我对他们真正的问题是正确的,他们会得到与他们的代码完全相同的
ValueError
。嗯,实际上我收回这一点,自从你发布了这个答案后,OP已经大大改变了他们的问题。这是对原来问题的一个很好的回答。你是什么意思?您是否建议该文件包含非数字值?是的,这正是我认为OP当前的问题所在。@zwol我是否应该包含一些正则表达式来避免这个问题?
numbers = []
with open('filename.txt','r') as numbers_file:
    for line in numbers_file:
        try:
            num = float(line.strip())
            numbers.append(num)
        except ValueError:
            continue