2

ここで小さな問題があります。複数のファイル (50) からエントリを合計しようとしていますが、それぞれに 3 つの列が含まれています。たとえば、最初の 3 つのファイルを使用する場合: file1.txt、file2.txt、file3.txt は次のようになります。

ファイル1.txt:

2 3 4
1 5 6
5 4 7

file2.txt:

1 2 1
2 3 2
4 3 1

file3.txt:

6 1 1
1 3 0
3 4 5

私の質問は、50 個のファイルの 1 列目、2 列目、3 列目のすべてのエントリを合計して、最終的に次のようなファイルにする方法です。

output.txt:

9 6 6
4 11 8
12 11 13

50 個のファイルを読み込んで追加しましたが、実際にエントリを 1 つずつ合計するのに問題があります。

だから私はこれをやった:

for p in range(50):
    locals()['first_col%d' % p] = []
    locals()['second_col%d' % p] = []
    locals()['third_col%d' % i] = []

for i in range(1,50):
    f = open("file"+str(i)+".txt","r")
    for line in f:
        locals()['fist_col%d' % i].append(float(line.split()[0]))
        locals()['second_col%d' % i].append(float(line.split()[1]))
        locals()['third_col%d' % i].append(float(line.split()[2]))

f.close()

すべての first_cols(first_col1、first_col2、first_col3 など)、second_cols、および third_cols を読み取り、エントリを合計するループにこれを配置する方法を考えようとしています。

4

3 に答える 3

2
#!/usr/bin/python
b_list = []
for l in range(1,4):
    file=open('/Users/sgeorge/file%i.txt' % l, 'r')
    m1=[(i.strip()) for i in file]
    for j in m1:
        b_list.append(filter(None,[(k.strip()) for k in j]))
#print b_list
a = [[0,0,0],[0,0,0],[0,0,0]]
for i in range(0,9,3):
    a[0][0] += int(b_list[i][0])
    a[0][1] += int(b_list[i][1])
    a[0][2] += int(b_list[i][2])
for i in range(1,9,3):
    a[1][0] += int(b_list[i][0])
    a[1][1] += int(b_list[i][1])
    a[1][2] += int(b_list[i][2])

for i in range(2,9,3):
    a[2][0] += int(b_list[i][0])
    a[2][1] += int(b_list[i][1])
    a[2][2] += int(b_list[i][2])

for j in a:
    print j[0],j[1],j[2]

出力:

$ python stack.py 
9 6 6
4 11 8
12 11 13

上記のスクリプトは、3 つのファイル ( file1.txtfile2.txtおよびfile3.txt)のみを処理するためのものです。

このようなファイルを 50 個処理する場合は、次のようにします。

#!/usr/bin/python
b_list = []
for l in range(1,51):
    file=open('/Users/sgeorge/file%i.txt' % l, 'r')
    m1=[(i.strip()) for i in file]
    for j in m1:
        b_list.append(filter(None,[(k.strip()) for k in j]))
#print b_list
a = [[0,0,0],[0,0,0],[0,0,0]]
for i in range(0,150,3):
    a[0][0] += int(b_list[i][0])
    a[0][1] += int(b_list[i][1])
    a[0][2] += int(b_list[i][2])
for i in range(1,150,3):
    a[1][0] += int(b_list[i][0])
    a[1][1] += int(b_list[i][1])
    a[1][2] += int(b_list[i][2])

for i in range(2,150,3):
    a[2][0] += int(b_list[i][0])
    a[2][1] += int(b_list[i][1])
    a[2][2] += int(b_list[i][2])

for j in a:
    print j[0],j[1],j[2]

アップデート:

>>> a=1
>>> b=1.1
>>> type(a)
<type 'int'>
>>> type(b)
<type 'float'>
>>> float(a)+float(b)
2.1
>>> 

上記のスクリプトはfloating 番号を処理しません。同じことを処理するには、次を使用します。

#!/usr/bin/python
b_list = []
for l in range(1,4):
    file=open('/Users/sgeorge/file%i.txt' % l, 'r')
    m1=[(i.strip()) for i in file]
    for j in m1:
        b_list.append(j.replace('\n','').split(' '))
#print b_list
a = [[0,0,0],[0,0,0],[0,0,0]]
for i in range(0,9,3):
    a[0][0] += float(b_list[i][0])
    a[0][1] += float(b_list[i][1])
    a[0][2] += float(b_list[i][2])
for i in range(1,9,3):
    a[1][0] += float(b_list[i][0])
    a[1][1] += float(b_list[i][1])
    a[1][2] += float(b_list[i][2])
for i in range(2,9,3):
    a[2][0] += float(b_list[i][0])
    a[2][1] += float(b_list[i][1])
    a[2][2] += float(b_list[i][2])
for j in a:
    print j[0],j[1],j[2]

出力:

$ python stack.py 
9.0 6.0 6.0
4.0 11.0 8.0
12.0 11.0 13.0
于 2013-02-05T18:14:22.850 に答える
0

http://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html numpy 配列にロードしてから、配列を合計します。

于 2013-02-05T16:38:36.580 に答える
0
In [1]: import numpy as np

In [2]: from StringIO import StringIO

In [3]: txt ="""2 3 4
   ...: 1 5 6
   ...: 5 4 7"""

In [4]: f = StringIO(txt)

In [5]: arr = np.loadtxt(f,dtype = int)

In [6]: np.sum(arr,axis = 0)
Out[6]: array([ 8, 12, 17])
于 2013-02-05T17:05:41.960 に答える