Импортируйте .py flie в Jupyter Notebook построчно

Я предпочитаю писать свой код Python на VSCode из-за его функций intellisense и автозаполнения. Но я бы предпочел увидеть и отладить код на записной книжке Jupyter, чтобы лучше визуализировать данные, с которыми я работаю.

Я знаю, что могу загрузить любой файл в Jupyter с помощью волшебных команд %load или %loadpy. Но они загружают весь файл в одну ячейку.

Поскольку я хотел увидеть промежуточные результаты определенных операций, я хотел бы импортировать файл таким образом, чтобы каждая строка в файле была назначена ячейке в записной книжке. Если это не функция или условный оператор (другими словами, что-либо с отступом); в этих случаях следует складывать весь блок в одну ячейку.

Как я могу это сделать?

Есть комментарии к моему ответу?

swatchai 04.12.2018 05:15

Привет, Swatchai, к сожалению, у меня еще не было времени взглянуть на твой ответ. Я посмотрю, как только смогу.

FTM 05.12.2018 08:08
Swatchai, я только что протестировал ваше решение, и оно не работает ни с одним кодом, который имеет отступы.
FTM 05.12.2018 08:32

Я только что выделил некоторые слова, которые подразумевают объем вопроса. ;П

swatchai 07.12.2018 14:35

Ой, моя плохая! Позвольте мне перефразировать. :)

FTM 08.12.2018 20:02

Это не то, что мы делаем здесь, в SO. Вы должны спросить то, что вы только что добавили, как новый вопрос. И еще раз подумайте, что вы ответили на ответы, основанные на исходной версии вашего вопроса.

swatchai 10.12.2018 04:53
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
6
1 773
2

Ответы 2

AFAIK, при загрузке файла в записную книжку Jupyter это невозможно сделать. Однако вы можете легко разделить большую ячейку на несколько ячеек, используя ctrl + shift + -. Это разделит вашу ячейку в том месте, где в это время находится ваш курсор.

Я не знаю, насколько велики ваши файлы, но это действительно быстрый и эффективный способ разбить ячейки, так что, возможно, это сработает для вас =)

Не совсем то, что я искал, но действительно полезный совет! Спасибо!

FTM 29.11.2018 13:42

Вы можете создать новый файл записной книжки Jupyter программно с помощью модуля nbformat. Разрешите продемонстрировать все шаги с работающим кодом.

Ниже приведены ячейки в записной книжке Jupyter. В этой ячейке есть волшебная команда, которая создает файл с именем script001.py.

%%writefile script001.py
x = 10
print('x is: %s' % x)
y = 20
print('y is: %s' % y)
z = x+y
print('z is: %s' % z)

Код во второй ячейке ниже создает новую записную книжку с именем split_cells.ipynb.

import nbformat as nbf

# create notebook object
nb2 = nbf.v4.new_notebook()

# prep cells' content for the new notebook
code = []
with open('script001.py') as fi:
    for aline in fi:
        code.append(aline.rstrip())

# take each line of code as single cells
nb2['cells'] = [nbf.v4.new_code_cell(ea) for ea in code]

# name of notebook to create
fname = 'split_cells.ipynb'

# create new notebook file
with open(fname, 'w') as fj:
    nbf.write(nb2, fj)

Когда вы откроете новую записную книжку split_cells.ipynb, у вас будут такие ячейки:

In[]: x = 10

In[]: print('x is: %s' % x)

In[]: y = 20

In[]: print('y is: %s' % y)

In[]: z = x+y

In[]: print('z is: %s' % z)

Этот ноутбук готов к работе по вашему желанию. Надеюсь, поможет.

Как я и предполагал, ваш код работает только для очень ограниченного и небольшого количества кода. Основная причина этого в том, что ваш код не поддерживает, например, создание функций. Поскольку он разделяет каждую строку кода, он также отделяет, например, определение функции от своего тела. См. этот экран для печати здесь.

FTM 05.12.2018 08:31

Представьте, пожалуйста, дальше, поскольку это может быть отправной точкой и не слишком много труда для людей, которые ответят на вопрос. Вы не ожидаете, что полный исполняемый код будет работать со всеми типами ваших файлов xxx.py. К вашему сведению, многострочные функции можно разделить в файл и импортировать для использования с single cell на ноутбуке Jupyter.

swatchai 05.12.2018 09:56

Вы правы Swatchai. Если ваш ответ будет улучшен и дальше, он может стать настоящим ответом на мой вопрос. Но, поскольку это неправильный ответ, просто указываю правильное направление, я не могу отметить его как правильный ответ. Но я отметил, что это полезно.

FTM 06.12.2018 13:02

Собственно говоря, у меня есть полное решение вашего расширенного вопроса. Но я думаю, что это хорошо для другого вопроса. Я не хочу редактировать свой ответ, который отвечает на постоянно меняющийся вопрос.

swatchai 09.12.2018 11:42

Другие вопросы по теме