2016-02-11 2 views
1

В настоящее время я пытаюсь создать программу, которая делает текстовый файл с первой строкой «s16», после чего он должен заполнить следующие строки цифрами. Мой текущий код выглядит примерно так:Запись строки в текстовый файл, а затем массив с использованием numpy savetxt

import os 
import numpy as np 
file = open('workfile.txt','wb') 
file.write('s16\n') 
array=np.eye(4) 
np.savetxt(file, array, fmt='%.3f', newline=os.linesep) 

Но это выплевывает ошибку в file.write('s16\n'), потому что я открыл файл с «термометром», который означает, что я пытаюсь писать байты и «S16 \ п» является строка. Но если я изменю «wb» на «w», тогда np.savetxt(file, wut, fmt='%.3f', newline=os.linesep) выдает аналогичную ошибку, не находясь в режиме «wb». Есть ли способ примирить эти два? Благодаря!

ответ

0

Try:

file.write(b's16\n') 

В Python3 типа строка по умолчанию Юникода, так что вы должны использовать дополнительные b для обозначения байта строки.

savetxtload экземпляров) работает с байтовыми строками. Поэтому вы можете открыть файл с помощью «wb».

Проверьте документы savetxt. Думаю, вы можете дать ему заголовок и линии трейлера (может все еще понадобиться b - если только savetxt не делает преобразование).

+0

Это именно то, что я искал, спасибо! Единственная проблема заключается в том, что file.write (b's16 \ n '), по-видимому, не создает новую строку, а когда np.savetxt (файл, массив, fmt ='%. 3f ', newline = os.linesep) запускает' s16 'находится в том же ряду, что и первая строка или np.eye (4) –

0

Не прямой ответ на ваш вопрос, но я надеюсь, что он все еще может помочь.

Я перестал использовать numpy для записи и загрузки файлов и, скорее, использовать pickle. Этот пакет имеет дело с различными типами данных и списком/массивами намного лучше, чем numpy.

Фрагмент кода Пример:

import pickle 
f = open("myfile.txt", 'w') 
pickle.dump("My string", f) 

Можно также открыть файл только для чтения или чтения & записи. Я очень рекомендую этот пакет.

+0

'savetxt' пишет текст в общем формате CSV. Таким образом, его файлы могут быть прочитаны/записаны другими программами, включая распространенные листы. 'pickle' - специфичный для Python. – hpaulj

Смежные вопросы