【问题标题】:Python - Getting the average of n lines in a txt filePython - 获取 txt 文件中 n 行的平均值
【发布时间】:2016-07-20 20:50:00
【问题描述】:

我上网查看并尝试解决此问题,并使用其他帖子中的解决方案来构建我的解决方案,但是从这里开始,我不知道下一步该做什么。

我基本上想获取 PastWinners 文本文件的最后 5 行,然后得到这些数字的平均值。我目前拥有的是整个文档的平均值,并打印出文本文件中的最后一行。

with open('PastWinners.txt') as f:
    data = [float(line.rstrip()) for line in f]

    first = f.readline()      # Read the first line.
    f.seek(-2, 2)             # Jump to the second last byte.
    while f.read(1) != b"\n": # Until EOL is found...
        f.seek(-2, 1)         # ...jump back the read byte plus one more.
    last = f.readline()       # Read last line.

biggest = min(data)
smallest = max(data)
print(sum(data)/len(data))
print(last)

感谢您的帮助。

【问题讨论】:

  • 遍历 f 后,对 readline 的调用将返回 None
  • 数据是如何写入文件的?每行一个值?

标签: python file text numbers average


【解决方案1】:

您可以使用slicing 只获取最后5个数字(我删除了所有不相关的代码):

with open('PastWinners.txt') as f:
    data = [float(line.rstrip()) for line in f]
print(sum(data[-5:])/len(data[-5:]))

data[-5:] 表示只取最后一项之前的 5-1 到最后一项的数据。

【讨论】:

  • 谢谢,完美运行。顺便说一句,是否可以让打印语句只显示最多 2dp?
  • 当然。将最后一行更改为:print("{0:0.2f}".format(sum(data[-5:])/len(data[-5:])))
【解决方案2】:

您可以以相反的顺序读取文件,并在 5 次读取后使用 break 退出循环。您也可以从文件末尾开始运行循环的 5 次迭代,因此您根本不必使用 break

Here是如何在Python中反向读取。

【讨论】:

    【解决方案3】:

    这也适用于文件少于 5 行的情况,并且会将您的平均值格式化为小数点后 2 位。

    with open('PastWinners.txt') as f:
        data = [float(line.rstrip()) for line in f]
    
    if len(data) > 5:
        data = data[-5:]
    
    print min(data), max(data), "{:.2f}".format(sum(data)/len(data))
    

    【讨论】:

      猜你喜欢
      • 2015-02-04
      • 2014-04-20
      • 2020-11-14
      • 2015-10-19
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多