#python #for-loop #if-statement
#python #for-цикл #оператор if
Вопрос:
Всем привет! Я прочитал в файле CDF дату, время, широту и долготу спутника на орбите. Я пытаюсь записать текстовый файл, который сохраняет данные каждый раз, когда спутник зависает над арктической станцией (у меня это широта и долгота с небольшим значением ошибки).
Мне удалось сохранить текстовый файл с соответствующими условиями, но слишком много данных для просмотра и выводит это:
2013-01-09 02:05:00 -57.097008 40.165134
2013-01-09 02:06:00 -57.29849 40.504826
2013-01-09 02:07:00 -57.49554 40.834732
2013-01-09 02:08:00 -57.68884 41.154243
2013-01-09 02:09:00 -57.881386 41.45857
и т.д.
Несколько лет данных — это слишком много для обработки… По сути, я хочу найти способ, чтобы код отображал интервалы времени. Таким образом, вместо того, чтобы поминутно, это было бы больше похоже:
2013-09-01 02:00:00 ~ 2013-09-01 02:14:00
2013-10-05 04:23:00 ~ 2013-10-05 04:32:00
Код, который я использовал, был:
From spacepy import cdf
import datetime
from numpy import *
import numpy as np
cdf = pycdf.CDF('/directory/file.cdf')
print(cdf)
TIME = cdf['EPOCH']
LAT = cdf['SouthBtrace_GM_LAT']
LON = cdf['SouthBTrace_GM_LON']
#Loop Count
count = 0
with open("example.txt", "a") as testing:
for i, j in zip(LAT, LON):
if(-65.26 <= i <= -59.26 and 32.31 <= j <= 52.31):
count =1
n = count
testing.write(str(TIME[n-1]) 't' str(i) 't' str(j) 'n')
else:
count =1
Прошу прощения, если мой вопрос сбивает с толку. Я новичок в программировании и никогда не использовал stackoverflow.
Редактировать:
>> type(TIME[0])
datetime.datetime
Комментарии:
1. Как отображается значение ВРЕМЕНИ в файле cdf?
2. Итак, в нем есть три элемента: эпоха (включает в себя как дату, так и время в одном), широта и долгота. Я не знаю, как отделить дату от времени. Когда я печатаю (cdf), он выводит -> Epoch: CDF_EPOCH [525600], SouthBtrace_GM_LAT: CDF_FLOAT [525600] и SouthBtrace_GM_LON: CDF_FLOAT [525600]
3. Вам следует внимательнее взглянуть на объекты datetime , особенно
timedelta
это может быть полезно для вас. Кроме того, пожалуйста, укажите немного больше, как вы хотите группировать выходные данные. Следует ли группировать их по фиксированному временному интервалу или только тогда, когда разница во времени с предыдущим временем меньше заданного значения?
Ответ №1:
Ну, я бы подумал, что вы добавляете параметр времени и дополнительное условие «если», которое выполняется только тогда, когда разница во времени достаточно велика (10 минут, или 15 минут, или что вы хотите). Итак, как:
import datetime
delta = datetime.timedelta(seconds = 600) ## the time gap that you want to use
time_one = datetime.datetime(2020,9,16,5,26,0) ## some arbitrary starting value
with open("example.txt", "a") as testing:
for i, j in zip(LAT, LON):
if(-65.26 <= i <= -59.26 and 32.31 <= j <= 52.31):
if TIME > time_one delta:
count =1
n = count
testing.write(str(TIME[n-1]) 't' str(i) 't' str(j) 'n')
time_one = TIME ## resets the time_one value to the new time
else:
count =1
Таким образом, никакие новые данные не будут записаны в текстовый файл, если значение времени не составляет не менее 600 секунд (при условии, что значение ЭПОХИ указано в секундах … если нет, очевидно, используйте соответствующие единицы измерения) позже, чем предыдущая записанная запись.
Комментарии:
1. Привет, извините, что не отвечаю. Я пытался это выяснить. Проблема в формате ВРЕМЕНИ: год, месяц, день, час, минута, секунда. Он не ведет себя как массив. Я пытаюсь извлечь час, минуту и секунду отдельно, но, черт возьми, это не работает. Когда я перечисляю (ВРЕМЯ), это дает мне datetime.datetime (2015,1,1,16,35) и т.д.
2. ОК. Тогда, как прокомментировал @Jakob Borchardt, вам, вероятно, потребуется использовать datetime.timedelta. Я отредактировал свой ответ выше таким образом, который, как я думаю, сработает.
3. Последняя проблема, большое вам спасибо за то, что помогли мне… Я запустил код, и в нем было указано: TypeError: ‘>’ не поддерживается между экземплярами ‘Var’ и ‘datetime.datetime’. Я понятия не имею, что такое Var
4. Скорее всего, вы скопировали приведенный выше код и попытались его запустить. Однако
TIME
в вашем случае это не объект datetime. Вы можете достичь этого, расширивfor
-цикл доfor i, j, t in zip(LAT, LON, TIME): ... if t > time_one delta
. Не могли бы вы добавить в свой пост выше результатtype(TIME[0])
?5. Я думаю, что, возможно, нашел ответ на свою проблему, хотя мне все еще нужно выяснить, как с этим справиться. ‘Var’ из spacepy.pycdf.Var.