2017-01-13 13 views
1

Я просто пытаюсь поместить мою 11-столбную, одну строку значений в текстовый файл, к которому я могу добавить новые строки. Я привык к python 2.7, и я не понимаю, почему мой np.savetxt не ведет себя так же, как раньше.Добавление массива в файл .txt в Python 3

Я знаю, что это будет создавать свой текстовый файл без каких-либо ошибок типа:

with open("testtext.txt", "wb") as myfile: 
    np.savetxt(myfile, mydata, fmt="%.5f", delimiter=' ', newline=' ') 

Однако, когда я затем запустить свой код, чтобы получить свои новые данные, которые мне нужно добавить, и изменить его на:

with open("testtext.txt", "ab") as myfile: 
    np.savetxt(myfile, mynewdata, fmt="%.5f", delimiter=' ', newline=' ') 

Не ставится mynewdata в новый ряд. У меня есть ввод \n в новую строку, я пробовал " " вместо ' ', я пробовал \r\n, но это был длинный снимок. Пожалуйста, помогите, я чувствую, что это должно быть просто. Спасибо.

ответ

2

Повторите свой вопрос, поэтому, если новый массив (строка) не запущен в новой строке, это должна быть последняя строка вашего текстового файла, не была окончена символом новой строки. Так, как @hpaulj отметил, что это должно работать:

with open("testtext.txt", "wb") as myfile: 
    f.write(b'\n') 
    ... 

Если вы работаете на окнах, возьмите «\ г \ п» вместо «\ п».

+0

Благодарю вас, @Will, это сработало, и мне пришлось использовать '\ r \ n'! – layces

0

Если сохранить 1d массива с типичным ограничителем и без специального символа новой строки, он сохраняет одно значение для каждой строки:

In [548]: with open('test.txt','wb') as f: 
    ...:  np.savetxt(f, np.arange(3), fmt='%5d', delimiter=',') 
In [549]: cat test.txt 
    0 
    1 
    2 

Использования «» перевод строки, помещает их в одну строке - но заканчивается файл без \n

In [550]: with open('test.txt','wb') as f: 
    ...:  np.savetxt(f, np.arange(3), fmt='%5d', delimiter=',', newline='') 

In [552]: cat test.txt 
    0 1 2In [553]: 

Следующее приложение будет продолжено на этой линии.

Я мог бы указать b'\n' написать. Это должно быть bytestring nl. (np.savetxt делает либеральное использование np.lib.npyio.asbytes).

In [557]: with open('test.txt','ab') as f: 
    ...:  f.write(b'\n') 
    ...:  np.savetxt(f, np.arange(3), fmt='%5d', delimiter=',', newline='') 

In [558]: cat test.txt 
    0 1 2 
    0 1 2In [559]: 

Или, может быть, я должен сделать привычку добавлять \n запись в конце такой savetxt.

ИЛИ, я мог бы просто убедиться, что я напишу 2d-массив в файл, даже если я хочу написать только одну строку. Обертка массива в списке сделает трюк. Подумайте о savetxt, итерации по «строкам» (первый размер) ввода и записи одной строки за раз (отформатировано с fmt, разделителем и новой строкой).

In [559]: with open('test.txt','wb') as f: 
    ...:  np.savetxt(f, [np.arange(3)], fmt='%5d', delimiter=',') 

In [560]: cat test.txt 
    0, 1, 2 

In [561]: with open('test.txt','ab') as f: 
    ...:  np.savetxt(f, [np.arange(4)], fmt='%5d', delimiter=',') 

In [562]: cat test.txt 
    0, 1, 2 
    0, 1, 2, 3 

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

  • Нет связанных вопросов^_^