2011-06-24 32 views
0

我有一系列的文件(在下面显示的格式),具有不同的名称,如: 100107_902988_6188DAAXX_s_6.sorted 100107_902988_6188DAAXX_s_7.sorted (如果你注意到只有部分6和7是在文件名称不同)如何计算python系列文件中只有一列的平均值?

enter image description here

我希望所有这些文件的最后一列有数字(第8列以15开头)的平均值!如果可能的话在文本文件中,例如: 100107_902988_6188DAAXX_s_6.sorted:15(或曾经平均是什么) 100107_902988_6188DAAXX_s_7.sorted:17

我试图与data.split命令,然后使用e [7]列,但我得到了每一行的平均值!比如3个15(我认为我的脚本是1 + 5/2) 我想知道是否有人可以帮助我 提前致谢!

回答

1

没有测试,但是这样的事情应该做的伎俩:

import glob 

def avg(lst): 
    return float(sum(lst))/len(lst) 

all_numbers = [] 
for filename in glob.glob("100107_902988_6188DAAXX_s_*.sorted"): 
    numbers = [] 
    with open(filename, "r") as file: 
     for line in file: 
      numbers.append(int(line.split()[7])) 
    print "{0}: {1:.2f}".format(filename, avg(numbers)) 
    all_numbers.extend(numbers) 
print "Total average: {0:.2f}".format(avg(all_numbers)) 
+0

的感谢!但我有一些困难!第一件事是最后一行不能运行,我得到一个SyntaxError:无效语法!但是当我用最后一行运行它时,我会得到每个文件的编号!据我所知,最后一个是平均的所有文件? (所以对我来说没有必要),但是我仍然得到一个非常低的数字(大约3,我期待10左右)!有什么方法可以测试它是否正在计算正确的数字?我试图创建一个类似格式的文件,我知道它的平均值,但是当我运行它时,我得到的列表索引超出范围 – Mahmood

+0

@Mahmood尝试在战略位置插入调试'print'语句以查看它实际正在处理的数字。例如。在'avg'函数中,执行'print lst'和'print sum(lst),len(lst)'。我猜这是以某种方式向列表中添加大量'0'项,或者类似的东西。 –