使用python从不同文件中汇总数百行的列

时间:2018-08-30 02:50:22

标签: python file numpy

我有几十个文件(a,b,c,...),每个文件具有以下格式:

文件a ------文件b ------文件c -------等
x1a y1a | x1b y1b | x1c y1c | ...
x2a y2a | x2b y2b | x2c y2c | ...
x3a y3a | x3b y3b | x3c y3c | ...



请记住,每个文件中有数百行,其中两列。 我只想逐行汇总每个文件的第二列,即

Y1 = y1a + y1b + y1c + ...
Y2 = y2a + y2b + y2c + ...
Y3 = y3a + y3b + y3c + ...



然后,创建一个新的两列文件,其内容为:

x1a Y1
x2a Y2
x3a Y3



有人可以帮忙吗?
谢谢!

1 个答案:

答案 0 :(得分:1)

使用loadtxt和一些巧妙的切片非常有可能。

在您的示例中,您似乎希望file_a中的第一列,而第二列是所有y行的总和。这是我使用的示例文件:

file_a.txt      file_b.txt         file_c.txt
1 2             4 3                1 2
3 4             2 1                6 7
5 6             6 7                9 1
7 8             5 2                2 3

首先,让我们通过水平堆叠然后将文件读取到数组中:

filenames = [f'file_{i}.txt' for i in ('a', 'b', 'c')]
arr = np.column_stack([np.loadtxt(f) for f in filenames])

[[1. 2. 4. 3. 1. 2.]
 [3. 4. 2. 1. 6. 7.]
 [5. 6. 6. 7. 9. 1.]
 [7. 8. 5. 2. 2. 3.]]

现在我们的索引。我们可以通过从索引y开始获取其他所有列来访问所有1列:

arr[:, 1::2]

array([[2., 3., 2.],
       [4., 1., 7.],
       [6., 7., 1.],
       [8., 2., 3.]])

所以现在我们可以沿第一个轴求和该数组,并再次使用column_stack将其与第一列x合并,最后写入文件:

out = np.column_stack([arr[:, 0], arr[:, 1::2].sum(1)])
np.savetxt('out.txt', out, fmt='%d')

这是out.txt

1 7
3 12
5 14
7 13