在python中,计算文件的第1行和最后一行的时间差

时间:2014-05-03 07:20:26

标签: python file-io

我有一个包含以下结构的日志文件:

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 个答案:

答案 0 :(得分: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]检索最后一项。然后根据需要将它们存储在列表中。

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