取三个不同文本文件的平均值并编译成一个文件

时间:2017-04-06 01:06:01

标签: python

我在一个目录中有三个文本文件,它们有两列数据,由一个标签(\t)分隔。

我想在三个不同文本文件的同一列中取三个数字的平均值。我关注的数字是在第二列或选项卡之后(在列表中它将位于位置1)。然后我想输出一个文件,其中所有第1列都被复制(它们是相同的文本),第2列则是相应行的平均值。

这就是我目前所拥有的:我从另一个堆栈溢出问题中得到了这个代码,但它并没有遍历3个不同的文件。

谢谢!

import sys

allfiledata = []
filenames = sys.argv[1:]
for filename in filenames:
  rows = []
  with open (filename, "r") as filehandle:
    for line in filehandle:
      rows.append( line.split() )

    allfiledata.append( rows ) 


print " ".join(allfiledata[0][0])  # column headers
for i1,columns in enumerate(allfiledata[0][1:]):
  print columns[0],
  for i2,value in enumerate(columns[1:]):
    total = 0 
    for filedata in allfiledata:
      total = int(filedata[i1+1][i2+1]) + total
    print int(float(total)/len(allfiledata)+0.5), 
  print 

我的文本文件如下所示:

FILE1.TXT

AAA     4
AAB     5
AAC     0
AAD     1   

FILE2.TXT

AAA     4
AAB     5
AAC     0
AAD     1

file3.txt

AAA     4
AAB     5
AAC     0
AAD     1

注意:这些列表会持续数千个 我想把三个不同文件中的数字的平均值看起来像这样,并输出一个带有复制的第一列的文件和数字的平均值。

1 个答案:

答案 0 :(得分:0)

import glob

files = glob.glob(r'C:\files\*.txt')

d = {}
for file in files:
    with open(file, 'r') as f:
        for line in f:
            k, v = line.split()
            try:
                d[k].append(int(v))
            except KeyError:
                d[k] = [int(v)]

with open('results.txt', 'w') as f:
    for k in sorted(d.keys()):
        line = '{0}\t{1}\n'.format(k, sum(d[k])/len(d[k]))
        f.write(line)

修改:如果您不使用python3并希望将结果作为浮点数,请不要忘记在脚本中添加from __future__ import division作为第一个代码行。