Я предпочитаю писать свой код Python на VSCode из-за его функций intellisense и автозаполнения. Но я бы предпочел увидеть и отладить код на записной книжке Jupyter, чтобы лучше визуализировать данные, с которыми я работаю.
Я знаю, что могу загрузить любой файл в Jupyter с помощью волшебных команд %load или %loadpy. Но они загружают весь файл в одну ячейку.
Поскольку я хотел увидеть промежуточные результаты определенных операций, я хотел бы импортировать файл таким образом, чтобы каждая строка в файле была назначена ячейке в записной книжке. Если это не функция или условный оператор (другими словами, что-либо с отступом); в этих случаях следует складывать весь блок в одну ячейку.
Как я могу это сделать?
Привет, Swatchai, к сожалению, у меня еще не было времени взглянуть на твой ответ. Я посмотрю, как только смогу.
Я только что выделил некоторые слова, которые подразумевают объем вопроса. ;П
Ой, моя плохая! Позвольте мне перефразировать. :)
Это не то, что мы делаем здесь, в SO. Вы должны спросить то, что вы только что добавили, как новый вопрос. И еще раз подумайте, что вы ответили на ответы, основанные на исходной версии вашего вопроса.






AFAIK, при загрузке файла в записную книжку Jupyter это невозможно сделать. Однако вы можете легко разделить большую ячейку на несколько ячеек, используя ctrl + shift + -. Это разделит вашу ячейку в том месте, где в это время находится ваш курсор.
Я не знаю, насколько велики ваши файлы, но это действительно быстрый и эффективный способ разбить ячейки, так что, возможно, это сработает для вас =)
Не совсем то, что я искал, но действительно полезный совет! Спасибо!
Вы можете создать новый файл записной книжки 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)
Этот ноутбук готов к работе по вашему желанию. Надеюсь, поможет.
Как я и предполагал, ваш код работает только для очень ограниченного и небольшого количества кода. Основная причина этого в том, что ваш код не поддерживает, например, создание функций. Поскольку он разделяет каждую строку кода, он также отделяет, например, определение функции от своего тела. См. этот экран для печати здесь.
Представьте, пожалуйста, дальше, поскольку это может быть отправной точкой и не слишком много труда для людей, которые ответят на вопрос. Вы не ожидаете, что полный исполняемый код будет работать со всеми типами ваших файлов xxx.py. К вашему сведению, многострочные функции можно разделить в файл и импортировать для использования с single cell на ноутбуке Jupyter.
Вы правы Swatchai. Если ваш ответ будет улучшен и дальше, он может стать настоящим ответом на мой вопрос. Но, поскольку это неправильный ответ, просто указываю правильное направление, я не могу отметить его как правильный ответ. Но я отметил, что это полезно.
Собственно говоря, у меня есть полное решение вашего расширенного вопроса. Но я думаю, что это хорошо для другого вопроса. Я не хочу редактировать свой ответ, который отвечает на постоянно меняющийся вопрос.
Есть комментарии к моему ответу?