Как загрузить / отредактировать / запустить / сохранить текстовые файлы (.py) в ячейку блокнота IPython?

232

Недавно я перешел на использование ноутбуков IPython как часть моего рабочего процесса. Однако мне не удалось найти способ импорта файлов .py в отдельные ячейки открытой записной книжки IPython, чтобы их можно было редактировать, запускать, а затем сохранять. Можно ли это сделать?

Я нашел это в документации, в которой рассказывается, как импортировать файлы .py в качестве новых записных книжек, но это не соответствует тому, чего я хочу достичь.

Любые предложения будут высоко ценится.

aaronsstack
источник
6
Хороший вопрос. Мне еще предстоит увидеть действительно удовлетворительный ответ. Это особенно важно при обслуживании ноутбука IPython через Интернет. Если люди хотят видеть / редактировать исходный код импортируемых функций (с подсветкой синтаксиса и т. Д.), В настоящее время нет простого способа сделать это. Должна быть возможность открывать файлы py без их преобразования в файлы ipynb.
Питер

Ответы:

306

РЕДАКТИРОВАТЬ : Начиная с IPython 3 (сейчас проект Jupyter), ноутбук имеет текстовый редактор, который можно использовать в качестве более удобной альтернативы для загрузки / редактирования / сохранения текстовых файлов.

Текстовый файл может быть загружен в ячейку ноутбука с помощью волшебной команды %load.

Если вы выполните ячейку, содержащую:

%load filename.py

содержимое filename.pyбудет загружено в следующую ячейку. Вы можете редактировать и выполнять его как обычно.

Чтобы сохранить содержимое ячейки обратно в файл, добавьте магию ячейки %%writefile filename.pyв начале ячейки и запустите ее. Помните, что если файл с таким именем уже существует, он будет перезаписан .

Чтобы увидеть справку по любой магической команде, добавьте ?: like %load?или %%writefile?.

Для получения общей справочной информации о магических функциях введите «% magic». Для получения списка доступных магических функций используйте% lsmagic. Для описания любого из них введите% magic_name ?, например, «% cd?».

Смотрите также: Волшебные функции из официальных документов IPython.

user2304916
источник
3
Это плюс, %save -fкажется, способ сделать то, что я искал. Спасибо!
aaronsstack
2
save -fэто своего рода косвенный способ сохранения в файл, который будет работать только в том случае, если сначала выполнить ячейку, а затем указать правильную ссылку. В общем, проще использовать %%writefileзапись текущей ячейки в файл. Я обновил ответ, чтобы упомянуть об этом.
user2304916
4
Новая магическая команда в настоящее время %loadpy(а не %load).
AlQuemist
1
в соответствии с ipython.org/ipython-doc/3/interactive/magics.html использование %loadв порядке, продвижение вперед: " %loadpy ( Alias ​​of %load ) - %loadpyприобрел некоторую гибкость и отменил требование .pyрасширения. Таким образом, оно было переименовано просто в %load. Вы можете посмотреть на %loadстроку документации для получения дополнительной информации. "
Майкл
118

Написать / сохранить

%%writefile myfile.py

  • записать / сохранить содержимое ячейки в myfile.py (использовать -aдля добавления). Еще один псевдоним:%%file myfile.py

Бежать

%run myfile.py

  • запустить myfile.py и вывести результаты в текущей ячейке

Загрузить / импортировать

%load myfile.py

  • загрузить "import" myfile.py в текущую ячейку

Для большей магии и помощи

%lsmagic

  • перечислите все другие классные магические команды клетки.

%COMMAND-NAME?

  • для получения справки о том, как использовать определенную команду. т.е.%run?

Заметка

Помимо магических команд ячейки, блокнот IPython (теперь блокнот Jupyter) настолько крут, что позволяет использовать любую команду unix прямо из ячейки (это также эквивалентно использованию %%bashмагической команды ячейки).

Чтобы запустить команду unix из ячейки, просто поставьте перед ней команду с !меткой. например:

  • !python --version увидеть вашу версию Python
  • !python myfile.pyзапустите myfile.py и выведите результаты в текущей ячейке, как %runпоказано ниже (см. разницу между !pythonи %runв комментариях ниже).

Также смотрите этот nbviewer для дальнейшего объяснения с примерами. Надеюсь это поможет.

Азиз Альто
источник
1
Спасибо, я использую windows и попробовал! Dir, output и !dir Volume in drive D is Documentsт.д ... Так что это не только bash, но и cmd!
Брайан
1
@iamaziz Я думаю, что вы имели в виду !python --version(опечатка)
Александр
5
Азиз, это отличный ответ. Одно маленькое примечание: это очень немного отличается от использования %run myfile.pyв противоположность !python myfile.py. Если вы сделаете первый, он будет выполняться с использованием ядра ipython, включая любую предварительно настроенную загрузку. Небольшая проблема, но сегодня я столкнулся с ошибкой, которая изменила меня.
Тристан Рейд
Если вы хотите сделать эквивалент, %run myfile.pyописанный в этом ответе, при включении магических команд ячейки IPython в свой сценарий, используйте %run myfile.ipy.
Уэйн
8

Перетащите файл Python в таблицу «домашних» блокнотов Ipython, нажмите «Загрузить». Это создаст новую записную книжку с одной ячейкой, содержащей содержимое файла .py

Остальное скопируйте / вставьте из вашего любимого редактора;)

Рафаэль Брауд
источник
1
Спасибо за ваш ответ, но, как я уже упоминал в основной части своего поста, я стараюсь не создавать новый блокнот каждый раз, а поддерживать скрипт .py внутри ячейки существующего блокнота.
aaronsstack
Исправьте меня, если я ошибаюсь: вы не хотите использовать ноутбук в качестве текстового редактора? (Я имею в виду: каждая модификация в ячейке не изменит файл .py). Кстати, я не имею ни малейшего понятия о том, как вставить в ячейку содержимое .py, я всегда копирую / вставляю свой код, когда это необходимо ... извините
Raphaël Braud
5

Я нашел удовлетворительным использование ls и cd в блокноте ipython для поиска файла. Затем введите cat your_file_name в ячейку, и вы вернете содержимое файла, которое затем сможете вставить в ячейку как код.

RussellStewart
источник
!cat "file.txt"
Энрике Перес Эрреро