【问题标题】:Finding average in .txt file python在 .txt 文件 python 中查找平均值
【发布时间】:2014-04-20 01:34:53
【问题描述】:

我需要从 .txt 文件中打印出平均高度。我如何以一种简单的方式编写它? .txt 文件有这些数字:

12
14
59
48
45
12
47
65
152

这是我到目前为止所得到的:

import math

text = open(r'stuff.txt').read()
data = []
with open(r'stuff.txt') as f:
    for line in f:
        fields = line.split()
        rowdata = map(float, fields)
        data.extend(rowdata)

biggest = min(data)
smallest = max(data)
print(biggest - smallest)

【问题讨论】:

  • 你知道如何计算平均数吗?
  • 你为什么要把整个文件读成文本,再也不用了?

标签: python text max average minimum


【解决方案1】:

在此处结合其他答案元素的完整、几乎无环的解决方案:

with open('stuff.txt','r') as f:
    data = [float(line.rstrip()) for line in f.readlines()]
    f.close()
mean = float(sum(data))/len(data) if len(data) > 0 else float('nan')

而且您不需要预先添加、附加、包含或导入任何其他内容。

【讨论】:

    【解决方案2】:

    求平均值的简单程序如下(如果我理解得很好,你的文件每一行都有一个值,如果是,它必须与此类似,否则必须相应更改):

    import sys
    
    f = open('stuff.txt', 'rU')    
    lines = f.readlines()    
    f.close()
    
    size =  len(lines)
    sum=0
    for line in lines:
        sum = sum + float(line.rstrip())
    
    avg = sum / float(size)    
    print avg,
    

    不是python中最好的,但我认为它很简单......

    【讨论】:

    • 最好使用with 声明
    【解决方案3】:
    data = [float(ln.rstrip()) for ln in f.readlines()]  # Within 'with' statement.
    mean_average = float(sum(data))/len(data) if len(data) > 0 else float('nan')
    

    这就是计算 mean 平均值的方法,如果这就是您的意思的话。可悲的是,math 没有这个功能。仅供参考,修改mean_average 行是为了避免list 的长度为0 时会出现的ZeroDivisionError 错误——以防万一。

    【讨论】:

      【解决方案4】:
      # import math -- you don't need this
      
      # text = open(r'stuff.txt').read() not needed.
      # data = [] not needed
      
      with open(r'stuff.txt') as f:
          data = [float(line.rstrip()) for line in f]
      
      biggest = min(data)
      smallest = max(data)
      print(biggest - smallest)
      print(sum(data)/len(data))
      

      【讨论】:

        【解决方案5】:

        要计算一些数字的平均值,您应该将它们相加,然后除以数字的数量:

        data = []
        with open(r'stuff.txt') as f:
            for line in f:
                fields = line.split()
                rowdata = map(float, fields)
                data.extend(rowdata)
        
        print(sum(data)/len(data))
        

        【讨论】:

        • 奇怪的是这个答案被接受了,因为这些行没有多个字段。
        【解决方案6】:

        数组平均值可以这样计算:

        print(sum(data) / len(data))
        

        【讨论】:

          猜你喜欢
          • 2013-11-21
          • 2017-02-18
          • 1970-01-01
          • 2014-04-21
          • 1970-01-01
          • 2018-09-15
          • 2017-06-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多