Улучшение модульности функции, которая сохраняет несколько запросов в таблицу CSV - PullRequest
0 голосов
/ 23 апреля 2020

Многие мои приложения основаны на следующей структуре:

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 для скорости.

Вещи, о которых я думал

Возможно, диктат требований ?

Потенциально новой проблемой, если порядок столбцов не задан жестко, будет вопрос о том, как обрабатывать имена и порядок столбцов в выходном файле?

...