我有一个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中执行此操作的最快(我最简单)方法是什么?
答案 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
我怀疑上面的代码,特别是第二个代码,可能会更精简/优化,但应该足以让你开始。
您仍然会调整从字符串到适当类型(float
或int
)的转换,并创建输出文件并以您喜欢的格式写入。这些是您最能决定的细节。
答案 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