0

Pythonで「numbers.txt」というファイルを開くことができるようにしたいのですが、ファイルにはコンマで区切られた数字が含まれている必要があります。例えば

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(",")

これはこれまでの私のコードですが、それをさらに進める方法がわかりません。

4

4 に答える 4

3

CSVリーダーを使用してデータを入力し、入力が見つかったら、平均を計算して、必要に応じて出力します。最初のビットだけを示し、行を出力するコードをいくつか示します。そこからその方法を理解できるようにします。このコードは python 2.x 用にファクタリングされています。python 3.x に変換するには、print のみを変更する必要があります。

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
于 2013-01-17T18:11:01.057 に答える
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
于 2013-01-17T18:18:20.633 に答える
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
于 2013-01-17T18:38:59.857 に答える
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()
于 2013-01-17T19:17:16.050 に答える