Многие мои приложения основаны на следующей структуре:
filename = "something.csv"
iter_number = 0
# just 3 deques for illustration purposes
timestamp_deque = deque(maxlen)
another_deque = deque(maxlen)
xy_deque = deque(maxlen)
... # continue adding all the deques you need
while(True):
# do a bunch of stuff
# (e.g, read frame from camera do processing calculate values)
# append to deques
if iter_number % maxlen == 0:
save_deque(...)
if condition:
save_deque(...)
break
iter_number =+ 1
Ниже я хочу оптимизировать свою функцию save_deque
. Поскольку я хочу обрабатывать случаи, когда выход происходит не кратно maxlen
, я должен нарезать деку, чтобы сохранить «оставшиеся» значения, которые не были сохранены.
def save_deque(iter_number, timestamp_deque, deque_to_save, xy, maxlen, filename):
unsaved_elements = iter_number % maxlen
if (unsaved_elements == 0):
print("Saving " + filename + " on iteration..." + str(iter_number))
# array with timestamp and deque to save, transpose for having them as cols
d = np.array([timestamp_deque, deque_to_save, xy]).T
with open(filename,'a') as outfile:
np.savetxt(outfile, d,
delimiter=',', fmt='%s')
else:
# convert to list and slice the last unsaved elements
print("Saving rest of " + filename )
timestamp_rest = list(timestamp_deque)[-unsaved_elements:]
rest = list(deque_to_save)[-unsaved_elements:]
xy_rest = list(xy)[-unsaved_elements:]
d_rest = np.array([timestamp_rest, rest, xy_rest]).T
# Here we only save the rest
with open(filename,'a') as outfile:
np.savetxt(outfile, d_rest,
delimiter=',', fmt='%s')
return
Этот подход хорошо работает.
Задача
Я повторяю этот подход в разных сценариях, которые могут иметь разное количество запросов. Я ищу более гибкий подход / структуру данных, которая позволила бы мне иметь разные запросы для каждого скрипта без жесткого кодирования имен и срезов каждый раз и без ущерба для производительности.
Я достаточно открыт для структур данных, сохраняя deque
для скорости.
Вещи, о которых я думал
Возможно, диктат требований ?
Потенциально новой проблемой, если порядок столбцов не задан жестко, будет вопрос о том, как обрабатывать имена и порядок столбцов в выходном файле?