Получение первого и последнего элементов в списке JSON и нахождение разницы во времени - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь получить данные из этой конечной точки: https://developer.keeptruckin.com/reference#get -logs

Пока что я достиг всего, что получил все изменения статуса для драйвера журнал и события, связанные с ними. Теперь я хочу отображать только первое и последнее событие для каждого водителя каждый день и пропустить все промежуточные события для каждого водителя, но не могу понять, как это сделать.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import requests
import json
import csv
import math

url='https://api.keeptruckin.com/v1/logs?start_date=2020-01-20&end_date=2020-02-03'
header={'x-api-key':'API_KEY_HERE','x-time-zone':'Pacific Time (US & Canada)'}
r=requests.get(url,headers=header)
result=r.json()
result = json.loads(r.text)
num_pages=math.ceil((result['pagination']['total'])/100)
for page in range (1,num_pages):
    r=requests.get(url,headers=header, params={'page_no': page,'per_page':'100'})
    result=r.json()
    result = json.loads(r.text)
    csvheader=['First Name','Last Name','Date','Time','Type','Location','Vehicle']
    with open('test.csv', 'a+', newline='') as csvfile:
        writer = csv.writer(csvfile, csv.QUOTE_ALL)
        ##writer.writerow(csvheader)
        for log in result['logs']:
            username = log['log']['driver']['username']
            first_name=log['log']['driver']['first_name']
            last_name=log['log']['driver']['last_name']
            for vehicle in log['log']['vehicles']:
                number=vehicle['vehicle']['number']
            for event in log['log']['events']:
                start_time = event['event']['start_time']
                date, time = start_time.split('T')
                time1,time2=time.split('-')
                event_type = event['event']['type']
                location = event['event']['location']
                if not location:
                    location = "N/A"
                if (event_type=="on_duty" or event_type=="driving" or event_type=="off_duty"):
                    writer.writerow((first_name, last_name,date, time1, event_type, location, number))

После этого шага я пытаюсь добиться того, чтобы после того, как у меня появилось первое и последнее событие для каждого водителя, я хочу найти разницу во времени между этими двумя событиями и добавить ее в новый колонка.

1 Ответ

1 голос
/ 04 февраля 2020

Вы можете проанализировать вашу строку, используя dateutil.parser, он даст вам объект datetime. Затем вы можете сохранить всю необходимую информацию о событиях в списке, включая объект datetime, где каждая запись в списке представляет собой кортеж, содержащий всю информацию о событиях. Затем вы можете отсортировать список на основе объекта datetime. Из списка вы можете вынести первые и последние события. Разница между двумя объектами datetime даст вам timedelta, которую можно легко преобразовать в секунды.

from dateutil.parser import parse
for log in result['logs']:
        username = log['log']['driver']['username']
        first_name=log['log']['driver']['first_name']
        last_name=log['log']['driver']['last_name']
        for vehicle in log['log']['vehicles']:
            number=vehicle['vehicle']['number']
        events = []
        for event in log['log']['events']:
            start_time = parse(event['event']['start_time'])
            end_time = parse(event['event']['end_time'])


            location = event['event']['location']
            # add all data as tuple you want to save for event
            events.append((start_time,end_time, location))
        #sort based on first element of tuple -- start_time
        events.sort(key=lambda x: x[0])      
        first_event = events[0]
        last_event = events[-1]
        #time difference in seconds
        time_diff = (first_event[0]-last_event[0]).seconds # first_event[0] -- start time
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...