np.savetxt не записывает весь массив

#python #numpy

#python #numpy

Вопрос:

Я использую np.savetxt для записи 3D-массива в один CSV-файл. в первом индексе хранятся все 3 столбца и все 131 строка. Затем я использую цикл для добавления других индексов в нижнюю часть csv, но последние 23 столбца обрезаются.

spar — это 3D-массив, а каждый из spar 1-8 — это (131,3) массивы

 spars = np.array((spar1,spar2,spar3,spar4,spar5,spar6,spar7,spar8))

file_out = 'spars.csv'
np.savetxt(file_out,spars[0],delimiter=',')  
for i in range(1,8):
    f = open((file_out),'a')
    f.write('n')
    np.savetxt(f,spars[i],delimiter=',')    
    f.close
  

Ответ №1:

Как насчет того, чтобы поместить всю запись в with контекст?

 spars = [spar1,spar2,spar3,spar4,spar5,spar6,spar7,spar8]
# alist would be just as good as array for this iteration
file_out = 'spars.csv'
with open(file_out, 'w') as f:
    np.savetxt(f,spars[0],delimiter=',')
    for arr in spars[1:]:
        f.write('n')
        np.savetxt(f, arr, delimiter=',')  
  

Ответ №2:

по какой-то причине, поскольку он не закрывается перед повторным открытием, последние 23 элемента должны быть отрезаны, может быть, следующий цикл начнет запись до того, как он успеет закончиться?

f.close()

(в круглых скобках) исправлена проблема.

Комментарии:

1. Я бы посоветовал не открывать и не закрывать один и тот же файл несколько раз. Пусть python обрабатывает буферизацию и сброс файлов на диск, открывая и закрывая только один раз. Для этого with open(blah_blah_blah) as f: довольно удобно использовать конструкцию.