Лучший способ сохранить / загрузить данные в / из файла .CSV - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь сохранить и загрузить список кортежей из 2 ndarrays и int в файл .csv.

В моей текущей реализации, когда я сохраняю и загружаю список l, в восстановленном списке есть какая-то ошибка порядка 10^-10. Есть ли способ сохранить и восстановить значения более точно? Буду также признателен за комментарии к моему коду в целом. Спасибо!

Вот что у меня сейчас:

def save_l(l,path):
    tup=()
    for X in l:
        u=X[0].reshape(784*9)
        v=X[2]*np.ones(1)
        w=np.concatenate((u,X[1],v))
        tup+=(w,)
    L=np.row_stack(tup)
    df=pd.DataFrame(L)
    df.to_csv(path)

def load_l(path):
    df=pd.read_csv(path)
    L=df.values
    l=[]
    for v in L:
        tup=()
        for i in range(784):
            tup+=(v[9*i+1:9*(i+1)+1],)
        T=np.row_stack(tup)
        Q=v[9*784+1:10*784+1]
        i=v[7841]
        l.append((T,Q,i))
    return(l)

1 Ответ

0 голосов
/ 09 ноября 2018

Возможно, проблема связана с отсутствием защиты файла .csv во время сохранения и загрузки.

Хороший способ убедиться, что ваш файл заблокирован до тех пор, пока все данные не будут полностью сохранены / загружены, использует менеджер контекста . Таким образом, вы не потеряете никакие данные, если ваша система остановит выполнение по какой-либо причине, потому что все результаты сохраняются в тот момент, когда они доступны.

Я рекомендую использовать оператор with - , основным назначением которого является безопасная для исключения очистка объекта, используемого внутри (в данном случае, вашего .csv). Другими словами, он обеспечивает закрытие файлов, снятие блокировок, восстановление контекстов и т. Д.

with open("myfile.csv", "a") as reference:           # Drop to csv w/ context manager
     df.to_csv(reference, sep = ",", index = False)  # Same goes for read_csv
# As soon as you are here, reference is closed

Если вы попробуете это и по-прежнему увидите ошибку, это не связано с проблемами сохранения / загрузки.

...