2015-01-16 2 views
7

Я хотел был бы быть в состоянии сохранить TEXT выход iPython notebook cell в файл на диске.Как сохранить вывод ячейки в iPython ноутбуке?

У меня есть 2 дополнительные требования/пожелания:

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

Я понял, как использовать %%capture магии для некоторой базовой экономии ячейки тетради IPython в в файл, но он не кажется достаточно гибкие: он держит добавляя каждый раз, когда я повторно запустить клетку, и я не может отображать его в одной ячейке.

Вот то, что я до сих пор:

%%capture cap --no-stderr 
print 'stuff' 
with open('output.txt', 'w') as f: 
    f.write(cap.stdout) 

# clear the cap by deleting the variable here? 
# del cap 

Когда я пытаюсь поставить cap.show() после записи, он, кажется, не отображается. Вместо этого он дважды выводит вывод в переменную cap.

+1

Вы хотите * весь * текстовый вывод или только тот, который был создан операциями печати? Из-за механизма отображения IPython все объекты имеют текстовое представление, поэтому в записной книжке больше текста, чем видно в первую очередь. – Jakob

+1

Если вы только после распечатки, посмотрите ответы на [этот вопрос] (http://stackoverflow.com/q/11325019/2870069) – Jakob

ответ

6

У вас есть опечатка, отсутствует d в cap.stout. Это должно быть cap.stdout Я тестировал следующее, и он работал нормально. cap.show() также напечатал «материал» и перезапустил ячейку, перезаписав файл.

%%capture cap --no-stderr 
print 'stuff' 
with open('output.txt', 'w') as f: 
    f.write(cap.stdout) 
+0

исправлена ​​опечатка. Это было только в вопросе, а не в моем исходном коде. Переписывание в порядке, проблема в том, что он иногда дублирует вывод, если вы не делаете «del cap». Или, если вы добавите cap.show(), он дважды печатает его в файл (вместо одного раза в файл и один раз на экране) – pocketfullofcheese

+0

, то есть проблема не в перезаписи файла (открытие с помощью «w» очистит файл). Проблема в том, что переменная cap не очищается между прогонами. – pocketfullofcheese

+1

Запуск 'cap.show()' в другой ячейке не будет записываться в файл. – Amit

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