0

私はPythonが初めてで、質問があります。現在、これを使用して、メッセージが送信されてからメッセージが受信されるまでの時間を計算しています。結果の開始時間、時間差、および一意の ID がファイルに表示されます。同様に、私はPython 2.7.2を使用しています

現在、2回を減算しており、結果は0.002677777777(0.00は時間と分)であり、必要ありません。秒 (59.178533,00) で始まり、59 秒になるようにフォーマットするにはどうすればよいですか。同様に、python は数値を 8.9999999 x e-05 と表示することがあります。常に正確な数を表示するにはどうすればよいですか。

def time_deltas(infile): 
   entries = (line.split() for line in open(INFILE, "r")) 
   ts = {}  
   for e in entries: 
      if " ".join(e[2:5]) == "OuchMsg out: [O]": 
         ts[e[8]] = e[0]    
      elif " ".join(e[2:5]) == "OuchMsg in: [A]":    
         in_ts, ref_id = e[0], e[7] 
         out_ts = ts.pop(ref_id, None)    
         yield (float(out_ts),ref_id[1:-1], float(in_ts) - float(out_ts))

INFILE = 'C:/Users/klee/Documents/Ouch20111130_cartprop04.txt'
import csv

with open('output_file.csv', 'w') as f: 
   csv.writer(f).writerows(time_deltas(INFILE))

データの小さなサンプルを次に示します。

61336.206267 - OuchMsg out: [O] enter order. RefID [F25Q282588] OrdID [X1F3500687  ]
4

2 に答える 2

2

float(out_ts)時間の場合'{0:.3f}'.format(float(out_ts) * 3600.)、小数点以下 3 桁の秒のテキスト表現が表示されます。

于 2011-12-01T14:31:19.407 に答える
1

常に正確な数を表示するにはどうすればよいですか。

浮動小数点の不正確さのため、これは時々不可能です。

一方、できることは、必要に応じてフロートをフォーマットすることです手順については、こちらを参照してください。

yield例:行を次のように置き換えます。

yield ("%.5f"%float(out_ts),"%.5f"%ref_id[1:-1], "%.5f"%(float(in_ts) - float(out_ts)))

コンマの後のすべての値を 5 桁に切り捨てます。多くの異なるフォーマット用に、他のフォーマットオプションがあります。

于 2011-12-01T14:30:26.477 に答える