-3

番号のリストを含むテキスト ファイルがあります。この場合、3 つの数値それぞれの平均を計算したいと思います。これを行うためのアイデアはありますか?前にありがとう

テキスト ファイル内の数値の例:

5
7
3
10
12
6

私が望む出力:

5
9
4

4 に答える 4

1

テキスト ファイルを「解析」する必要があります。そのためには、ファイルがどのように構成され、どのようにエンコードされているかを知る必要があります。最初にいくつか質問があります。

  1. 数値は常にそれらの間にスペースを入れて保存されますか?
  2. この出力はどこにしますか? コンソールに出力?新しいtxtファイルで?

次のことができます

#read the file 
my_file = open("C:/numbers.txt",'r')
my_text = my_file.read()
my_file.close()

#get a list of numbers from it (in string form)
my_text_numbers = my_text.split(' ')

#use list comprehension to get integer...also consider
#using map function
my_int_numbers = [int(n) for n in my_text_numbers]

#now the averaging part I will leave to you, I assume it's
#the file reading part you needed help with.
于 2013-03-23T21:54:46.650 に答える
1

data.txt:

5
7
3
10
12
6

numpyを使用して処理する方法:

In [4]: import numpy as np

In [5]: with open('data.txt') as f:
    data = f.read().split()
   ...:     

In [6]: data
Out[6]: ['5', '7', '3', '10', '12', '6']

In [7]: a = np.array(map(float, data))

In [8]: a
Out[8]: array([  5.,   7.,   3.,  10.,  12.,   6.])

In [9]: b = a.reshape([-1,3])

In [10]: b
Out[10]: 
array([[  5.,   7.,   3.],
       [ 10.,  12.,   6.]])

In [11]: b.sum(1)/3
Out[11]: array([ 5.        ,  9.33333333])
于 2013-03-23T23:23:24.550 に答える
1

それらがそれぞれ1行にあると仮定します:

# text file is myData.txt
averages = {} # using a dictionary so you can keep track of the starting point
with open('myData.txt', 'r') as myFile:
    data = myFile.read().split('\n') # this creates a list of the data
for index in range(len(data), 3): # step of 3
    n = float(int(data[index]) + int(data[index+1]) + int(data[index+2])) / 3
    averages[index] = n

これはIndexError、リストが正確に 3 のチャンクではない場合に発生するため、 try/exceptブロックに追加しました。

# text file is myData.txt
averages = {}
with open('myData.txt', 'r') as myFile:
    data = myFile.read().split('\n') # this creates a list of the data
for index in range(len(data), 3): # step of 3
    try: a = int(data[index])
    except (IndexError, TypeError): a = 0
    try: b = int(data[index+1])
    except (IndexError, TypeError): b = 0
    try: c = int(data[index+2])
    except (IndexError, TypeError): c = 0
    # except (IndexError, TypeError): avoids an error if the end of the list 
    # has been reached or the line is not an integer
    n = float(a + b + c) / 3
    averages[index] = n
于 2013-03-23T21:50:28.063 に答える
0

これは、テキスト ファイルの行をリストに保存することで解決できます。また、ここで見ることができる csv モジュールを使用する必要があります import csv

file = open("fileName.txt", 'r')
reader = csv.reader(file)
allRows = [row for row in reader]

次に、allRows リストを取得し、値を加算して、allRows の長さで割ります。このモジュールは私がよく知らないので、この回答は私よりもよく説明しているかもしれません。

于 2013-03-23T21:48:22.913 に答える