从多个文件中汇总列值
我这里有个小问题,我想把50个文件里的数据加起来,每个文件都有3列数据。比如,前面这3个文件:file1.txt、file2.txt和file3.txt,它们的内容是这样的:
file1.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个文件中第一列、第二列和第三列的数据加起来,最后得到一个像这样的文件:
output.txt:
9 6 6
4 11 8
12 11 13
我已经把这50个文件读进来了,并且把它们合并在一起,但我在逐个加数据的时候遇到了问题。
所以我做了这个:
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_col1、first_col2、first_col3等等)、第二列和第三列,然后把这些数据加起来。
3 个回答
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])
这个代码块可能包含了一些编程的例子或说明,具体内容需要根据上下文来理解。一般来说,代码块是用来展示程序代码的地方,帮助大家更好地理解编程的逻辑和用法。
如果你对代码块里的内容有疑问,可以逐行分析,看看每一行代码在做什么,或者查找相关的资料来帮助理解。
0
这个链接指向的是一个关于如何使用NumPy库的文档。NumPy是一个非常流行的Python库,用来处理数组和进行数学计算。文档中提到的`numpy.loadtxt`这个功能,可以帮助你把文本文件中的数据加载到NumPy数组里。加载完数据后,你就可以对这些数组进行求和等操作了。
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
上面的脚本只处理三个文件(file1.txt
、file2.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
>>>
我上面的脚本不能处理float
类型的数字。要处理这种情况,可以使用以下方法:
#!/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