2015-02-03 3 views
0

По сути я хочу сделать обратныйКак изменить «nbconvert - from python»?

ipython nbconvert --to python foo.ipynb 

IOW, я хочу, чтобы программно «синтезировать» IPython блокноты из исходного кода Python (возможно, соответствующим образом комментировал).

Есть ли способ для этого?

FWIW, я ветеран пользователя Emacs и недавний «конвертируем» его в org-mode, поэтому я особенно приветствую решения, которые хорошо работают с ними.


Почему я хочу это сделать? Это очень длинная и утомительная история, но вкратце: мне нужно включить домашние задания для класса в виде файлов * .ipynb, но мне не нравится работать с ноутбуками iPython, так как я-фобик с мышью, только для текста Emacs-голова. Инструменты для работы с ноутбуками iPython в Emacs ужасны, если они вообще работают (на самом деле это «длинная и утомительная» часть истории). Единственный оставшийся ход действий для меня - это тот, о котором идет речь.

+0

Теперь это проблема первого мира :). Я думаю, проблема в том, что ноутбуки содержат больше информации, чем просто код. Преобразование 'ipynb'->' py' не является проблемой, потому что вы потеряете информацию. Преобразование 'py'->' ipynb' нуждается в дополнительной информации ... Это говорит: Ноутбуки - это просто файлы 'json'. Конечно, вы можете создавать свои собственные ноутбуки и запускать их через командную строку, например, с помощью 'runipy'. Легче было бы: Напишите свой код в своем любимом редакторе и скопируйте результаты в блокнот перед отправкой домашней работы :) – cel

+0

@cel Действительно, это проблема первого мира: у меня есть RSI от использования мыши; нужна операция для обоих плеч; моя ненависть к использованию мыши имеет медицинскую основу. (Опять же, я не могу придумать какую-либо проблему, опубликованную в SO, которая * не * проблема первого мира.) Что касается вашего предложения для копирования-вставки: каждая домашняя работа влечет за собой заполнение 20-30 пробелов кодом. Это 20-30 операций копирования-вставки. Нет, спасибо. Но спасибо за указатель runipy. – kjo

+0

Извините, что слышу это. Ноутбуки IPython не были предназначены для редактирования через командную строку. Но, как я уже сказал, конечно, никто не мешает вам изучить структуру файлов 'json' и манипулировать ноутбуком emacs.Таким образом, в принципе, можно писать и редактировать ноутбуки без использования gui. Конечно, это не очень приятное решение. Но я сомневаюсь, что есть лучшее решение этой довольно необычной проблемы. – cel

ответ

2

Перетаскивание файла py на приборную панель должно сделать трюк (в версии 2.x), есть специальные маркеры комментариев, которые будут разделять ноутбук в нужном месте. Он должен быть программно выполним, импортировав IPython.nbformat, чтобы получить все python api для создания ноутбуков. Некоторый код, вероятно, находится где-то в IPython/html/, если вы хотите пройти этот маршрут и иметь пример, не стесняйтесь спрашивать на IPython-dev ml, мы будем рады вам помочь. Эта часть кода недостаточно проверена пользователем.

Вы должны посмотреть ipymd (ipynb+md). Кирилл пишет с ней книгу и имеет дело с более или менее той же проблемой, что и «необходимость манипулировать чистым текстом».

Я также буду подчеркивать EIN, но де-факто поддерживаемая fork будет одной из millejoh, которая будет регулярно обновляться. Вы сможете напрямую редактировать ipynb-файл из emacs, + inline graph и т. Д. Но я думаю, что это один из «инструментов для работы с iPython-ноутбуками в Emacs», который вам не нравится, но будущий читатель может быть заинтересован.

Наконец, я просто хочу отметить, что если назначение является записью IPython (введите «заполнить пробелы») и сделана для того, чтобы быть оцененным с чем-то вроде github:jupyter/nbgrader, тогда прохождение чистого текста может не работать, поскольку ipynb может имеют дополнительные метаданные, которые не выживут при конверсии.

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