2013-01-17 90 views
1

我希望能夠在python中打開一個名爲「numbers.txt」的文件,該文件應該包含用逗號分隔的數字。例如Python中的數字的平均值

1,2 
6,4,7 
4,5,6 

我想寫計算每一行的平均值,然後一個函數返回它與每個平均值的列表:

例如,對於上面的函數的數字將返回:1.5 ,5.67,5]

def line_averages(filename): 
    f = open(filename, "r") 
    lines = f.readlines() 
    f.close 
    for line in lines: 
     b = line.split(",") 

這是我的代碼到目前爲止,但我不知道如何進一步。

+2

它是什麼,你有一個問題特別** **? – NlightNFotis

+1

聽起來很像功課... –

+4

小心:它是'f.close()',而不是'f.close'。 –

回答

3

使用CSV reader輸入數據,然後一旦找到輸入,計算平均值並根據需要輸出。我只打算展示第一點,一些代碼將打印出來,我會讓你從那裏弄清楚如何去做。這段代碼是爲python 2.x考慮的,只有打印應該改變爲將其轉換爲python 3.x.

import csv 
filename='blah.csv' 
with open(filename, 'rb') as csvfile: 
    spamreader = csv.reader(csvfile) 
    for row in spamreader: 
      for value in row: 
      print value 

編輯:說完看着你有什麼,你可以做如下改變:

def line_averages(filename): 
    f = open(filename, "r") 
    lines = f.readlines() 
    f.close() 
    for line in lines: 
     b = line.split(",") 
     for value in b: 
      print value 
+0

3,你還需要改變'open'('open(filename,newline ='')'等)。 – DSM

+0

比F3AR3DLEGEND的更優雅的解決方案,但是我會猶豫是否要向csv引入一個python新手特別是當他可以採取更新穎友好的方法時。 – NlightNFotis

+0

@NlightNFotis:我在寫入該解決方案之前,他已經包含任何代碼,因此我編輯顯示他的代碼的下一步,而不是使用csvreader。 – PearsonArtPhoto

1

你已經開了一個不錯的開始,但尚未完成。 一個簡單的方法(在我看來)來讀取每一個文件的行線:

def line_averages(fileName): 
    line_avgs = [] 
    with open(fileName, 'r') as my_file: 
     for line in my_file: # this will read the file line by line 
      numbers = line.split(',') 
      total = 0 
      for num in numbers: 
       total += int(num) 
      my_avg = total/float(len(numbers)) # it must be a float so it returns a float 
      line_avgs.append(my_avg) 
    my_file.close() 
    return line_avgs 
+1

這看起來不對。 'num'是一個字符串,而你的'my_avg'和'line_avgs'這兩行似乎縮進了太多。 (我自己會使用'sum'/genexp解決方案。) – DSM

+0

哇,沒注意到。我正在寫這個很快......修正了:P –

1

我想你失蹤了後來的字符串轉換爲整數的方式。 之後,你只需要總結一個鴻溝,希望它有幫助。

def line_averages(filename): 
    averages = [] 
    with open(filename) as f: 
     for line in f.readlines(): 
      numbers = [int(x) for x in line.split(',')] 
      averages.append(sum(numbers)/float(len(numbers))) 
    return averages 
1

可能是這一個會很難理解;但它會給你更多的洞察力。
文本文件:

1,2 
6,4,7 
4,5,6 
4,9,9,9 

平均每行:::

In [177]: from __future__ import division 

In [178]: f=open('test.txt',"r") 

In [179]: [reduce(lambda x,y:(float(x)+float(y)), a.split(','))/len(a.split(',')) for a in f.readlines()] 
Out[179]: [1.5, 5.666666666666667, 5.0, 7.75] 

In [180]: f.close()