Wenn Sie Jupyter verwenden, möchten Sie die Funktionen und Ergebnisse eines anderen Notebooks (ipynb-Datei) wiederverwenden. Es gab eine offizielle Möglichkeit, es als Python-Modul zu importieren, daher werde ich es vorstellen. (Ich werde es in Zukunft viele Male verwenden, also geben Sie die Bedeutung meines Memorandums an.)
Beispiel für eine offizielle Website: http://jupyter-notebook.readthedocs.io/en/latest/examples/Notebook/Importing%20Notebooks.html
Die Möglichkeit dazu besteht darin, ein Notizbuch auszuführen, das Ergebnis als Modul zu registrieren und den Import mit sys.meta_path zu verknüpfen und aufzurufen. Das Notebook wird ausgeführt, wenn der Import aufgerufen wird. Sie können jedoch sicher sein, dass der ursprüngliche Status nicht geändert wird.
Unten ist der Code.
import io, os, sys, types
from IPython import get_ipython
from nbformat import read
from IPython.core.interactiveshell import InteractiveShell
def find_notebook(fullname, path=None):
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):
def __init__(self, path=None):
self.shell = InteractiveShell.instance()
self.path = path
def load_module(self, fullname):
path = find_notebook(fullname, self.path)
with io.open(path, 'r', encoding='utf-8') as f:
nb = read(f, 4)
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.cells:
if cell.cell_type == 'code':
code = self.shell.input_transformer_manager.transform_cell(cell.source)
exec(code, mod.__dict__)
finally:
self.shell.user_ns = save_user_ns
return mod
class NotebookFinder(object):
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]
Speichern Sie dies als notebookutil.py usw. Beim Benutzen
import sys
import notebookutil as nbu
sys.meta_path.append(nbu.NotebookFinder())
Dann können Sie das Notizbuch importieren.
import mynotebook
Natürlich können Sie Funktionen und Klassen verwenden, aber da Sie tatsächlich Notebook ausführen, können Sie Variablen mit den Werten zum Zeitpunkt der Ausführung importieren. Super praktisch! !!
Da es ausgeführt wird, werden auch print, plt.show usw. angezeigt. Wenn Sie jedoch die Zelle ausführen, die das Notebook erneut importiert, wird es ausgeblendet.
Dies gibt Ihnen ein komfortableres Jupyter-Leben.