文件第二列的值之和

时间:2012-07-08 16:49:15

标签: python

我有一个txt文件,每行包含2个以空格分隔的值:

x1 y1
x2 y2
x3 y3
...
xn yn

我想获得另一个包含以下内容的文件:

x1 y1
x2 y1+y2
x3 y1+y2+y3
...
xn y1+y2+y3+...+yn

在python中执行此操作的最快(我最简单)方法是什么?

4 个答案:

答案 0 :(得分:3)

这将让你启动

鉴于data.txt

1 1
2 2
3 3
4 4

和此代码段:

with open('data.txt') as inf:
    ysum = 0
    for line in inf:
        line = line.split()
        x, y = [float(i) for i in line]
        ysum += y
        print x, ysum

会给你(使用上面的float()):

1.0 1.0
2.0 3.0
3.0 6.0
4.0 10.0

另一方面,如果您想要带有+

的行
with open('data.txt') as inf:
    yline = []
    for line in inf:
        line = line.split()
        x = int(line[0])
        yline = '+'.join(yline + [(line[1])])
        print x, yline
        yline = [yline]

会给你(这次使用int()):

1 1
2 1+2
3 1+2+3
4 1+2+3+4

我怀疑上面的代码,特别是第二个代码,可能会更精简/优化,但应该足以让你开始。

您仍然会调整从字符串到适当类型(floatint)的转换,并创建输出文件并以您喜欢的格式写入。这些是您最能决定的细节。

答案 1 :(得分:2)

如果您已使用numpy数组,则代码最简单的方法是numpy.cumsum()

import numpy as np

a = np.loadtxt("input.txt")
a[:,1].cumsum(out=a[:,1]) # accumulate values in the 2nd column
np.savetxt("output.txt", a) #note: you could specify fmt="%d" for integer array

答案 2 :(得分:1)

with open('input.txt') as inf, open('output.txt','w') as outf:
    datatype = int    # or float
    yy = 0
    for line in inf:
        x,y = line.split()
        yy += datatype(y)
        outf.write('{} {}'.format(x, yy))

答案 3 :(得分:0)

<强> data.txt中:

1 10
2 20
3 30
4 40

<强>码

with open('data.txt') as f1,open('output.txt','w') as f2:
    lis=[map(int,line.split()) for line in f1]
    for i,z in enumerate(lis):
        f2.write("{0:d} {1:d}\n".format(z[0],sum(lis[j][1] for j in range(i+1))))

<强>输出

1 10
2 30
3 60
4 100