I'm dealing with a large amount of data that has both values and times(in strings).
I am converting the string time values into datetime values with the following code:
time = datetime.datetime.strptime(time, " %H:%M:%S.%f")
The only problem is that some of my data has the format: 24:00:00.004.
So some of the data is actually over 24 hours
Python is giving me this error: ValueError: time data ' 24:00:00:004' does not match format ' %H:%M:%S.%f'
Any ideas on how to deal with this problem
The %H
parameter can only parse values in the range 0-23. You'll have to manually deal with those specific time stamps:
try:
time = datetime.datetime.strptime(time, " %H:%M:%S.%f")
except ValueError:
time = time.replace(' 24', ' 23')
time = datetime.datetime.strptime(time, " %H:%M:%S.%f")
time += datetime.timedelta(hours=1)
Try parsing the hours separately:
hours, rest = time.split(':', 1)
time = datetime.timedelta(hours=int(hours)) + datetime.datetime.strptime(rest, "%M:%S.%f")
Seems like your data does not contain dates, but time spans, so you should maybe store your data as timedelta
instead of datetime
.
You can use this function to create a timedelta
from your strings:
import re
from datetime import timedelta
def parseTimeDelta(s):
d = re.match(
r'((?P<days>\d+) days, )?(?P<hours>\d+):'
r'(?P<minutes>\d+):(?P<seconds>\d+)\.(?P<milliseconds>\d+)',
str(s)).groupdict(0)
return timedelta(**dict(( (key, int(value))
for key, value in d.items() )))
Parsing your time string '24:00:00.004'
like this
>>>t = parseTimeDelta('24:00:00.04')
would result in a timedelta represented like this
>>> print t
1 day, 0:00:00.004000
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With