求和所有数字在python中的文本文件中属于同一组

时间:2017-11-30 10:55:44

标签: python

我有一个像这个例子的文本文件:

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中做到这一点吗?

1 个答案:

答案 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))