计算文件中的行数,选择行中的浮点数,添加它们并计算平均值

时间:2016-08-13 19:06:58

标签: python

  

编写一个提示输入文件名的程序,然后打开该文件   读取文件,查找表格的行:

     

X-DSPAM-Confidence: 0.8475

     

计算这些行并从每个行中提取浮点值   这些线并计算这些值的平均值并产生一个   输出如下图所示。不要使用sum()函数或变量   在您的解决方案中命名为sum

     

您可以在下载示例数据   http://www.pythonlearn.com/code/mbox-short.txt
  当您在下面进行测试时,请输入mbox-short.txt作为文件名。

这是我的代码,它不起作用。如果你知道如何解决它,请解释(尽可能简单):

# Use the file name mbox-short.txt as the file name
fname = raw_input("Enter file name: ")
fh = open(fname)
count = 0
total = 0
for line in fh:
    if not float(line.startswith("X-DSPAM-Confidence:")) : continue
    count = count + 1
    float(total) = float(total) + float(line)
float(average = total/count)
print "Average spam confidence: ", average

正确答案应为:Average spam confidence: 0.750718518519

2 个答案:

答案 0 :(得分:1)

您在代码中没有做任何事情来实际从行中提取浮点值。简单地将line转换为浮动并尝试将其添加到总不会起作用,因为line指的是文件中的整行。提取浮点值的一种简单方法是将行分割为:,然后将其后的所有内容分开。这可以这样做:floatnum = line.split(':')[1] [1]意味着它会占用我们用于分割线的分隔符之后的所有内容,在本例中为:

您的代码中还有其他一些错误,因此如果您只想了解我如何解除浮动并将其应用于您正在使用的方法并相应地调整您的代码,那么这将是一个好主意。

这里有一个适合您的工作示例,尽管这样可以完成您所需的工作:

fname = raw_input('Enter file name: ')
file = open(fname)

counter = 0
total = 0.0

for line in file:
    if 'X-DSPAM-Confidence:' in line:    # checks to see if line pertains to you
        counter += 1                     # if so, increment counter
        floatnum = line.split(':')[1]    # splits line at ':' and takes everything after it
        total += float(floatnum)         # ... and adjust total

average = total/counter                  # gets average

print 'Average spam confidence: ' + str(average)

我使用此文件作为输入,其中包含:

hello world
X-DSPAM-Confidence:    0.8475
hello world
X-DSPAM-Confidence:    0.8400
hello world
X-DSPAM-Confidence:    0.9475
hello world

结果: Average spam confidence: 0.878333333333

答案 1 :(得分:-1)

fname = input('输入文件名:') 文件=打开(fname)

count = 0 总计= 0.0

对于文件中的行: 如果“ X-DSPAM-Confidence:”符合以下条件:
计数=计数+1
floatnum = line.split(':')[1]
total =总计+ float(floatnum)
平均值=总数/计数
打印(“垃圾邮件平均可信度:'+ str(平均值))