正在从文件中提取浮点数



我正在学习EdX课程,在该课程中,我被要求:编写一个提示输入文件名的程序,然后打开该文件并阅读该文件,查找表格中的行:X-DSPAM-置信度:0.8475对这些线进行计数,从每条线中提取浮点值,计算这些值的平均值,并产生如下所示的输出。不要在解决方案中使用sum((函数或名为sum的变量。您可以在下载示例数据http://www.py4e.com/code3/mbox-short.txt当您在下面测试时,输入mbox-short.txt作为文件名。

我不想使用string.split((,因为课程中没有教授它

到目前为止,我面临的问题是,我不知道如何提取浮点值并求和。

fname = input("Enter file name: ")
fh = open(fname)
count = 0
val = 0
for line in fh:
if not line.startswith("X-DSPAM-Confidence:") :
continue
count = count+1
found = line.find(":")
data = float(line[found+1:])

val = val + data
avg = val/count
print("Average spam confindence", avg)

这是我一直在做的代码,但它给了我下一个结果:

平均垃圾邮件置信度0.036692592592592596

我应该得到:平均垃圾邮件置信度:0.750718518519我相信这是因为浮点数的不同值没有加到总和中,如果你能帮我解决这个问题的话:(

首先,您不必执行此val = val + data,因为数据将是文件中找到的最后一个值,所以每次文件找到类似的浮点数时都更新val

...
data = float(line[found+1:])
val += data
...

以上将防止数据被覆盖,而且你必须在之后而不是之前增加计数,因为如果你在找到数据之前增加,计数的总和将是正常计数的+1

fname = input("Enter file name: ")
fh = open(fname)
count = 0
val = 0
for line in fh:
if not line.startswith("X-DSPAM-Confidence:"):
continue
found = line.find(":")
data = float(line[found+1:])
val += data
count += 1
avg = val / count
print("Average spam confindence", avg)
file1=open("mbox.txt",'r')
count=0
confidence_value_sum=float(0)
for line in file1:
if line.startswith('X-DSPAM-Confidence: '):
count=count+1
atpos=line.find('0')
confidence_value=float(line[atpos: atpos+9])
confidence_value_sum= confidence_value_sum+confidence_value
print('Spam Count: ',count, 'confidence :', confidence_value )
print ('Aveage confidence value is :', confidence_value_sum/count)

最新更新