nukeymusic wrote: > On 17 dec, 12:20, "Günther Dietrich" <gd.use...@spamfence.net> wrote: >> nukeymusic <nukeymu...@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)) -- http://mail.python.org/mailman/listinfo/python-list