Vấn đề là sổ ghi chép không phải là một tệp python thuần túy. Các bước để nhập .ipynb
tệp được nêu trong phần sau: Nhập sổ ghi chép
Tôi đang dán mã, vì vậy nếu bạn cần ... bạn có thể sao chép và dán nhanh. Lưu ý rằng ở cuối tôi có import primes
câu lệnh. Tất nhiên bạn sẽ phải thay đổi điều đó. Tên tệp của tôi là primes.ipynb
. Từ thời điểm này, bạn có thể sử dụng nội dung bên trong tệp đó như bạn vẫn làm thường xuyên.
Ước gì có một phương pháp đơn giản hơn, nhưng điều này là trực tiếp từ tài liệu.
Lưu ý: Tôi đang sử dụng jupyter không phải ipython.
import io, os, sys, types
from IPython import get_ipython
from nbformat import current
from IPython.core.interactiveshell import InteractiveShell
def find_notebook(fullname, path=None):
"""find a notebook, given its fully qualified name and an optional path
This turns "foo.bar" into "foo/bar.ipynb"
and tries turning "Foo_Bar" into "Foo Bar" if Foo_Bar
does not exist.
"""
name = fullname.rsplit('.', 1)[-1]
if not path:
path = ['']
for d in path:
nb_path = os.path.join(d, name + ".ipynb")
if os.path.isfile(nb_path):
return nb_path
nb_path = nb_path.replace("_", " ")
if os.path.isfile(nb_path):
return nb_path
class NotebookLoader(object):
"""Module Loader for Jupyter Notebooks"""
def __init__(self, path=None):
self.shell = InteractiveShell.instance()
self.path = path
def load_module(self, fullname):
"""import a notebook as a module"""
path = find_notebook(fullname, self.path)
print ("importing Jupyter notebook from %s" % path)
with io.open(path, 'r', encoding='utf-8') as f:
nb = current.read(f, 'json')
mod = types.ModuleType(fullname)
mod.__file__ = path
mod.__loader__ = self
mod.__dict__['get_ipython'] = get_ipython
sys.modules[fullname] = mod
save_user_ns = self.shell.user_ns
self.shell.user_ns = mod.__dict__
try:
for cell in nb.worksheets[0].cells:
if cell.cell_type == 'code' and cell.language == 'python':
code = self.shell.input_transformer_manager.transform_cell(cell.input)
exec(code, mod.__dict__)
finally:
self.shell.user_ns = save_user_ns
return mod
class NotebookFinder(object):
"""Module finder that locates Jupyter Notebooks"""
def __init__(self):
self.loaders = {}
def find_module(self, fullname, path=None):
nb_path = find_notebook(fullname, path)
if not nb_path:
return
key = path
if path:
key = os.path.sep.join(path)
if key not in self.loaders:
self.loaders[key] = NotebookLoader(path)
return self.loaders[key]
sys.meta_path.append(NotebookFinder())
import primes