在Python中计算文本文件的平均值

时间:2013-03-23 21:33:21

标签: python python-2.7

我有一个包含数字列表的文本文件。在这种情况下,我想计算每三个数字的平均值。有什么想法吗?先谢谢

文本文件中的数字示例:

5
7
3
10
12
6

我想要的输出:

5
9

4 个答案:

答案 0 :(得分:1)

假设他们分别在一条线上:

# text file is myData.txt
averages = {} # using a dictionary so you can keep track of the starting point
with open('myData.txt', 'r') as myFile:
    data = myFile.read().split('\n') # this creates a list of the data
for index in range(len(data), 3): # step of 3
    n = float(int(data[index]) + int(data[index+1]) + int(data[index+2])) / 3
    averages[index] = n

如果列表不完全是3的块,则会引发IndexError,因此我添加了try / except块:

# text file is myData.txt
averages = {}
with open('myData.txt', 'r') as myFile:
    data = myFile.read().split('\n') # this creates a list of the data
for index in range(len(data), 3): # step of 3
    try: a = int(data[index])
    except (IndexError, TypeError): a = 0
    try: b = int(data[index+1])
    except (IndexError, TypeError): b = 0
    try: c = int(data[index+2])
    except (IndexError, TypeError): c = 0
    # except (IndexError, TypeError): avoids an error if the end of the list 
    # has been reached or the line is not an integer
    n = float(a + b + c) / 3
    averages[index] = n

答案 1 :(得分:1)

您需要“解析”文本文件并执行此操作,您需要知道它的组织方式以及编码方式。我先问了几个问题。

  1. 这些数字之间是否总是存有空格?
  2. 您想要这个输出?打印到控制台?在新的txt文件中?
  3. 您可以使用以下内容

    #read the file 
    my_file = open("C:/numbers.txt",'r')
    my_text = my_file.read()
    my_file.close()
    
    #get a list of numbers from it (in string form)
    my_text_numbers = my_text.split(' ')
    
    #use list comprehension to get integer...also consider
    #using map function
    my_int_numbers = [int(n) for n in my_text_numbers]
    
    #now the averaging part I will leave to you, I assume it's
    #the file reading part you needed help with.
    

答案 2 :(得分:1)

data.txt

5
7
3
10
12
6

如何使用numpy处理它:

In [4]: import numpy as np

In [5]: with open('data.txt') as f:
    data = f.read().split()
   ...:     

In [6]: data
Out[6]: ['5', '7', '3', '10', '12', '6']

In [7]: a = np.array(map(float, data))

In [8]: a
Out[8]: array([  5.,   7.,   3.,  10.,  12.,   6.])

In [9]: b = a.reshape([-1,3])

In [10]: b
Out[10]: 
array([[  5.,   7.,   3.],
       [ 10.,  12.,   6.]])

In [11]: b.sum(1)/3
Out[11]: array([ 5.        ,  9.33333333])

答案 3 :(得分:0)

这可以通过将文本文件的行保存到列表中来解决。您还应该使用csv模块,可以查看here     import csv

file = open("fileName.txt", 'r')
reader = csv.reader(file)
allRows = [row for row in reader]

然后,它应该工作以获取allRows列表,向上添加值,并除以allRows的长度。这个模块我不太清楚,所以this answer可能比我更好地解释它。