Преобразование метки времени и дельта-время с десятичной ошибкой

Мы работаем со столбцом метки времени в файле 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]
Другие вопросы по тегам