Преобразование метки времени и дельта-время с десятичной ошибкой
Мы работаем со столбцом метки времени в файле CSV и сталкиваемся с ошибкой, потому что метка времени CSV отформатирована так: 30:50.0, где мы достаточно уверены, что это часы и минуты. С десятичным числом в секундах, однако каждое десятичное число равно 0. Мы используем этот код, чтобы прочитать и получить время:
fmt = "%H:%M.0"
Тем не менее он возвращает эту ошибку: ValueError: время данных "30: 50.0" не соответствует формату "%H:%M.0", аналогичная ошибка, возвращаемая для использования: "%H:%M.%S" наконец, когда просто "% H:% M используется, мы получаем эту ошибку: остаются неконвертированные данные:.0 У нас нет идей о том, как редактировать или иным образом читать временной код. без ручного редактирования файла CSV.
# Import moduels for use
from datetime import datetime as dt
import itertools
# Creating a function that will get the total difference in time between each point
def compute_delta_time(timelist):
timetotal = []
a, b = itertools.tee(timelist)
next(b, None)
fmt = "%H:%M.0"
for start, end in itertools.izip(a,b):
timetotal.append((dt.strptime(end, fmt) - dt.strptime(start, fmt)).total_seconds())
return timetotal
Вот и вся наша функция.
2 ответа
Вы можете грубо заставить это:
>>> x="30:50.0"
>>> h,mm=x.split(":")
>>> m,s=mm.split(".")
>>> int(h)
30
>>> int(m)
50
>>> int(s)
0
Это некрасиво, но выполнимо.
Также я предлагаю вам добавить тег "python" в ваш пост.
%H
должен быть в диапазоне 0,23. Вы можете проанализировать строку продолжительности вручную, как подсказывает @PfunnyGuy:
def to_seconds(duration_string):
"""'30:50.0' -> 111000"""
hm, dot, seconds = duration_string.partition('.')
hours, minutes = map(int, hm.split(':'))
return (hours * 60 + minutes) * 60 + (int(seconds) if dot else 0)
Пример:
durations = map(to_seconds, ["25:01", "30:50.0"])
time_diff = [end - start for start, end in zip(durations, durations[1:])]
# -> [20940]