【问题标题】:Summing columns with hundred of lines from different files with python [closed]用python对来自不同文件的数百行的列求和[关闭]
【发布时间】:2018-08-30 02:50:21
【问题描述】:

我有几十个文件(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
.
.
.

有人可以帮忙吗?
谢谢!

【问题讨论】:

  • 所以你不用关心x1b
  • 欢迎来到 Stack Overflow。我建议你把它分成小块。首先,您需要打开一个文件并从中读取输入。

标签: python file numpy


【解决方案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.]]

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

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

【讨论】:

  • 太好了,@user3483203!它解决了我的问题。我趁机了解了我不知道的 loadtxt 和 conlumn_stack。谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多