2014-05-03 58 views
-7

時間我有以下結構的日誌文件:在蟒蛇,計算differnce從文件中的第一個和最後一行

2014-04-28 16:09:51:579491 Computer 0 4 
2014-04-28 16:09:55:636024 Computer 0 6 
2014-04-28 16:09:57:133587 Computer 0 8 
2014-04-28 16:09:58:545286 Computer 0 10 
2014-04-28 16:09:59:835178 Computer 0 12 
2014-04-28 16:10:01:015113 Computer 0 14 
2014-04-28 16:10:03:132038 Computer 0 16 
2014-04-28 16:10:04:373344 Computer 0 18 
2014-04-28 16:10:05:474140 Computer 0 20 
2014-04-28 16:10:06:334320 Computer 0 22 

我試圖找到時間考慮,這可以通過計算來實現第一行和最後一行的時間值之間的差異。我如何提取值以繼續?此外,我想要在行的最右側的數值並將其存儲到列表中。

現在,我有這個閱讀第一行和最後一行。

newf1=open("userdata.txt","r+") 
a=newf1.readlines() 
fline=a[0] 
lline=a[-1] 
print fline,lline 

任何幫助表示讚賞!

回答

2

一旦檢索行(因爲你已經做了),你可以切出的日期,例如:

>>> "2014-04-28 16:09:51:579491 Computer 0 4"[:26] 
'2014-04-28 16:09:51:579491' 

鑑於這種情況,你可以用datetime.strptime解析它。我會讓你找出the appropriate format codes。一旦你將兩個日期解析成datetime對象,你可以將它們相減,得到一個timedelta對象,你可以隨意處理。噹噹!

至於檢索每一行的最後一個值,你可以調用split沒有參數來分割空白和檢索最後一個項目[-1]。然後,只需將它們存儲在列表中,就像你想要的一樣。

0

這樣的:

def getvalues(x): 
    x=x.split(' ') 
    [year,month,day]=x[0].split('-') 
    [hour,minute,second,mili]=x[1].split(':') 
    rightnumbers=x[-1] 
    return [year,month,day,hour,minute,second,mili],rightnumbers 

def getdate(d1,d2): 
    labels=['years','months','days','hours','minutes','seconds','miliseconds'] 
    v=[str(abs(int(i[1])-int(i[0])))+' '+labels.pop(0) for i in zip(d1,d2)] 
    v=[str(i) for i in v if i[0][0]!='0'] 
    v[-1]='and '+str(v[-1]) 
    return ','.join(v) 

#then call with this: 
newf=getvalues(fline) 
newl=getvalues(lline) 
print getdate(newf[0],newl[0]) 
listyouwanted=[newf[1],newl[1]]