2011-06-24 34 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'項,或者類似的東西。 –