これはうまくいきます:
diffs = [0] + [j - data[i] for i,j in enumerate(data[1:])]
したがって、以下がdata.txt
含まれていると仮定します。
123.456
234.567
345.678
それから
with open('data.txt') as f:
data = f.readlines()
diffs = [0] + [float(j) - float(data[i]) for i,j in enumerate(data[1:])]
print diffs
譲ります
[0, 111.111, 111.11099999999999]
この回答は、計算された値をさらに処理するために保持することを前提としています。
ある時点で、これらをファイルに 1 行ずつ書き出したい場合は、次のようにします。
with open('result.txt', 'w') as outf:
for i in diffs:
outf.write('{0:12.5f}\n'.format(i))
必要に応じてフィールド幅を調整し (現在は 12 個のスペースが予約されており、小数点以下 5 個)、 file に書き出されますresult.txt
。
更新: (以下のコメントから) メモリに保持するにはデータが多すぎる可能性があるため、このソリューションは機能するはずです。Python 2.6 では、両方のファイルを同じ で開くことができないwith
ため、別々のステートメントになります。
with open('result2.txt', 'w') as outf:
outf.write('{0:12.5f}\n'.format(0.0))
prev_item = 0;
with open('data.txt') as inf:
for i, item in enumerate(inf):
item = float(item.strip())
val = item - prev_item
if i > 0:
outf.write('{0:12.5f}\n'.format(val))
prev_item = item
少しハック感があります。ただし、メモリ内に巨大なリストを作成しません。