2011-12-01 61 views
0

我對Python很陌生,有一個問題。目前我正在使用它來計算消息傳出和消息傳入之間的時間。產生的起始時間,時間增量和唯一標識隨後將顯示在文件中。同樣,我正在使用Python 2.7.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 ] 

回答

1

我怎樣才能迫使它始終顯示的確切人數。

有時候這是不可能的,因爲浮點不精確

什麼你可以做,另一方面是因爲你想格式化您的花車。有關說明,請參閱here

E.G:替換爲您yield行:

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

所有的值截斷到小數點後5位。還有其他格式選項,適用於很多不同的格式。

2

如果float(out_ts)是小時,那麼'{0:.3f}'.format(float(out_ts) * 3600.)會給你帶小數點後三位數的秒的文本表示。