我有一个像这个例子的文本文件:
fit c3 start=1455035 step=1
2.000000
2.000000
2.000000
2.000000
2.000000
2.000000
fit c2 start=5195348 step=1
1.000000
1.000000
1.000000
1.000000
1.000000
fit c4 start=6587009 step=1
10.000000
10.000000
10.000000
10.000000
10.000000
每个文本行(以fit开头)后跟一些数字行。我想总结每个文本行下面的所有数字(因此它们在同一组中)并将该组的第一个数字替换为该特定组的数量之和,并将其余数字替换为1.000000 - 如这个输出示例:
fit c3 start=1455035 step=1
12.000000
1.000000
1.000000
1.000000
1.000000
1.000000
fit c2 start=5195348 step=1
5.000000
1.000000
1.000000
1.000000
1.000000
fit c4 start=6587009 step=1
50.000000
1.000000
1.000000
1.000000
1.000000
并将其写入新文件。
我在Python中尝试了这段代码,但实际上没有返回我想要的内容。
lines = open("file.txt", "r").read().splitlines()
_sum = 0.
for i, line in enumerate(lines):
if not line.startswith('fit') :
_sum += float(line)
lines[i] = '{:0.6f}'.format(1.)
if line.startswith('fit') and i > 0:
lines[i-1] = '{:0.6f}'.format(_sum)
with open('output.txt', 'w') as out:
out.write(_sum)
你知道如何在python中做到这一点吗?
答案 0 :(得分:0)
只要跟踪哪一行是每个块的第一行,并在该位置写_sum
。
例如,我没有检查过,但是这样的事情应该有效
lines = open("file.txt", "r").read().splitlines()
_sum = -1
last_first_line = -1
for i, line in enumerate(lines):
if not line.startswith('fit') :
_sum += float(line)
lines[i] = '{:0.6f}'.format(1.)
if line.startswith('fit'):
if last_first_line > 0:
lines[last_first_line] = _sum
_sum = 0
last_first_line = i + 1
lines[last_first_line] = _sum
with open('output.txt', 'w') as out:
out.write('\n'.join(lines))