Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python对不同文件中的数百行列求和_Python_File_Numpy - Fatal编程技术网

用python对不同文件中的数百行列求和

用python对不同文件中的数百行列求和,python,file,numpy,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+ . . .

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

有人能帮忙吗

谢谢大家!

使用
loadtxt
和一些巧妙的切片,这是非常可能的

从您的示例中,似乎希望
文件的第一列是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
开始,每隔一列获取一次,从而访问所有
y
列:

arr[:, 1::2]

因此,现在我们可以沿着第一个轴对该数组求和,再次使用
column\u 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

因此,您不关心x1b等问题。欢迎使用堆栈溢出。我建议你把它分成小块。首先,您需要打开一个文件并从中读取输入。太好了,@user3483203!它解决了我的问题。我利用这个机会了解了loadtxt和conlumn_堆栈,这我并不知道。非常感谢。
out = np.column_stack([arr[:, 0], arr[:, 1::2].sum(1)])
np.savetxt('out.txt', out, fmt='%d')
1 7
3 12
5 14
7 13