calculate difference between two timestamps [newbie]
Peter Otten
__peter__ at web.de
Sun Dec 18 06:43:44 EST 2011
nukeymusic wrote:
> On 17 dec, 12:20, "Günther Dietrich" <gd.use... at spamfence.net> wrote:
>> nukeymusic <nukeymu... at gmail.com> wrote:
>> >I'm trying to calculate the difference in seconds between two
>>
>> [...]
>>
>> >>> import datetime
>> >>> date1 = datetime.datetime.strptime("Dec-13-09:47:12",
>> >>> "%b-%d-%H:%M:%S") date2 =
>> >>> datetime.datetime.strptime("Dec-13-09:47:39", "%b-%d-%H:%M:%S") delta
>> >>> = date2 - date1 delta_seconds = (delta.days * 60 * 60 * 24) +
>> >>> delta.seconds + ((delta.microseconds + 500000) / 1000000)
>>
>> For very big time differences you should consider to use the Decimal
>> arithmetics (standard module Decimal) instead of integer arithmetics
>> for the last line.
>> If you are sure, that you don't use fractional seconds, you can omit
>> the part with 'delta.microseconds'.
>>
>> Best regards,
>>
>> Günther
> That can very much Günther, this helped me a lot further, I'm only
> struggling with one more problem to finish my first python-program.
> Could you
> tell me why I can't write to the outputfile as I do in the code
> below:?
> #!/usr/bin/python
> #version 16/12/2011
> #Example of testfile
> #Dec-13-09:46:45 21.4 +4.76442190E-01 8.135530E-06 1.553691E+00
> #Dec-13-09:47:12 21.4 +4.76439120E-01 8.135839E-06 1.553726E+00
> #Dec-13-09:47:39 21.4 +4.76427260E-01 8.136261E-06 1.553853E+00
> import datetime
> f = open('testfile','r')
> g = open('outputfile','w')
> #get line 1 from input file:
> line1=f.readline()
> #get first element in line 1:
> date1=line1.rsplit()[0]
> #convert first element tot structured date time
> struct_date1=datetime.datetime.strptime(date1, "%b-%d-%H:%M:%S")
> for line in f:
> temp=line.rsplit()
> delta=datetime.datetime.strptime(temp[0], "%b-%d-%H:%M:%S")-
> datetime.datetime.strptime(date1, "%b-%d-%H:%M:%S")
> delta_seconds = (delta.days * 60 * 60 * 24) + delta.seconds +
> ((delta.microseconds + 500000) / 1000000)
> temp[0]=delta_seconds
> #the following line is wrong, but I don't know how to fix it:
> g.write(temp)
> #Close files
> f.close()
> g.close()
The write() method only accepts strings; you have to convert the temp list
to a string before passing it on. The minimal change:
for line in f:
temp = line.rsplit()
delta = (datetime.datetime.strptime(temp[0], "%b-%d-%H:%M:%S")
-datetime.datetime.strptime(date1, "%b-%d-%H:%M:%S"))
delta_seconds = ((delta.days * 60 * 60 * 24) + delta.seconds
+ ((delta.microseconds + 500000) / 1000000))
temp[0] = str(delta_seconds)
g.write(" ".join(temp) + "\n")
Other observations:
- you are repeating calculations in the loop that you can do (and did)
outside.
- use four-space indent for better readability
- there's no need to use rsplit(); use split()
After a few other modifications:
import datetime
def parse_line(line):
date, rest = line.split(None, 1)
date = datetime.datetime.strptime(date, "%b-%d-%H:%M:%S")
return date, rest
with open('testfile','r') as f:
with open('outputfile','w') as g:
first_date, first_rest = parse_line(next(f))
for line in f:
cur_date, rest = parse_line(line)
delta = cur_date - first_date
delta_seconds = ((delta.days * 60 * 60 * 24) + delta.seconds
+ ((delta.microseconds + 500000) / 1000000))
g.write("%s %s" % (delta_seconds, rest))
More information about the Python-list
mailing list