Это прямой вопрос, как использовать python для обработки файла журнала (пока рассматривайте его как строку json). Ниже приведены данные json:
{
"voltas": {
"ac": [
{
"timestamp":1590761564,
"is_connected":true,
"reconnection_status":"N/A"
},
{
"timestamp":1590761566,
"is_connected":true,
"reconnection_status":"N/A"
},
{
"timestamp":1590761568,
"is_connected":false,
"reconnection_status":"true"
},
{
"timestamp":1590761570,
"is_connected":true,
"reconnection_status":"N/A"
},
{
"timestamp":1590761572,
"is_connected":true,
"reconnection_status":"N/A"
},
{
"timestamp":1590761574,
"is_connected":false,
"reconnection_status":"false"
},
{
"timestamp":1590761576,
"is_connected":false,
"reconnection_status":"true"
}
]
}
}
Поскольку вопрос касается только обработки данных json, я пропускаю обсуждение данных в json. Теперь мне нужны проанализированные данные, как показано ниже.
{
"voltas" : [
"ac": {
"number_of_actual_connection_drops": 3,
"time_interval_between_droppings": [4, 8],
"number_of_successful_reconnections": 2,
"number_of_failure_reconnections": 1
}
]
}
Вот как анализируются данные:
"number_of_actual_connection_drops": Количество "is_connected" == false.
"time_interval_between_droppings": Это список, который будет заполняться с конца (добавляться с начала). Нам нужно выбрать метку времени элемента, который будет иметь «is_connected»: false и «reconnection_status»: «true». В этом случае последний (7-й элемент) блок с отметкой времени = 1590761576 . Теперь нам нужно найти метку времени предыдущего блока с «is_connected»: false и «reconnection_status»: «true». В данном случае это 3-й элемент с отметкой времени 1590761568 . Теперь последний элемент в списке - это разность этих временных меток 8. Теперь список [8]
.
Теперь временная метка 1590761568 , и у нас нет предыдущего блока с is_connected: false
и reconnection_status: true
, поэтому мы возьмем временную метку первого элемента, которая равна 1590761564 , а теперь разница равна 4. Итак, список равен [4, 8]
"number_of_successful_reconnections ": Количество« reconnected_status »= true
« number_of_failure_connections »: Количество« reconnected_status »= false
Мы можем достичь этого с помощью циклов for и некоторых если условия. Мне интересно сделать это, используя способы функционального программирования (сокращение, отображение, фильтр) в python.
Для упрощения я упомянул только «a c». Подобных предметов будет много. Спасибо.