[PYTHON] Importieren Sie bestimmte Zellen aus anderen Notizbüchern mit Jupyter-Notizbuch

Einführung

Wenn Sie Datenanalysen durchführen oder mit einem Jupyter-Notizbuch experimentieren, möchten Sie häufig bestimmte Zellen aus anderen Notizbüchern importieren, die Klassen für die Analyse usw. definieren. Hier sind zwei Möglichkeiten, die funktionieren könnten.

1. %% writefile magic befehl

Am einfachsten ist es, den magischen Befehl "%% writefile" zu verwenden. Der Inhalt der Zelle wird in "Dateiname" kopiert, indem am Anfang der Zelle "%% Schreibdatei-Dateiname" festgelegt wird. Jetzt müssen Sie nur noch den Dateinamen von einem anderen Notizbuch importieren.

Zelle, die Sie aus einem anderen Notizbuch lesen möchten


%%writefile hoge.py
class Hoge:
    def __init__(self):
        print('Hello from Hoge')

Lesen und verwenden Sie den Inhalt anderer Ausgabe-Notebookzellen


import hoge

x = hoge.Hoge()

2. Geben Sie Ihr Bestes, um Ihre eigenen zu machen

Official sagt: "Jeder möchte es tun, und er muss sich nicht nur mit einer öffentlichen API darum kümmern. Wenn Sie sagen "Sie können es tun!" ~~, möchte ich, dass Sie es mit nur einem Befehl ~~ tun können, also werde ich es selbst machen, indem ich auf den verknüpften Code [^ t dual] verweise.

[^ tdual]: @tdual hat Artikel über den Inhalt des Links geschrieben. Nach der Untersuchung scheint der in @ tduals Artikel veröffentlichte Code (dh der offiziell eingeführte Code) mit Legacy-Code gemischt zu sein, der seit Python 3.4 veraltet ist, sodass Modcell einige Änderungen vorgenommen hat. ____ ist drinnen. Wenn modcell aufgrund der Version nicht funktioniert, sollten Sie den Code von @ tdual ausprobieren.

Der verknüpfte Code führt alle Codezellen des als Modul geladenen Notebooks aus. Versuchen Sie daher, ihn so zu ändern, dass die Zelle mit "# modcell" im Kommentar am Anfang der Codezelle identifiziert und geladen wird. Es war.

Bitte verwenden Sie es, wenn Sie möchten, da es als Bibliothek namens "modcell" veröffentlicht wurde.

(Wenn Sie danach suchen, sollte es Leute geben, die clevere Bibliotheken erstellen als ich. Wenn also jemand eine gute Bibliothek kennt, würde ich es begrüßen, wenn Sie mich wissen lassen könnten.)

Usage modcell sucht nach Dateien mit der Erweiterung .ipynb, die in dem in sys.path registrierten Verzeichnis vorhanden sind, und wird in die erste Zeile (ohne magische Befehle) der Codezelle geschrieben. Identifiziert den Kommentar "# modcell" und importiert ihn als Modul.

Installation

pip install modcell

Modcell importieren

Beim Importieren des Moduls "modcell" wird "sys.meta_path" ein Loader hinzugefügt, um ".ipynb" zu laden. Danach können Dateien mit der Erweiterung ".ipynb" importiert werden.

import modcell as mods

IPynb-Datei importieren

Beim Importieren mit einem Namen ohne Erweiterung werden wie bei einem normalen Modul alle Zellen mit "# modcell" am Anfang der Zelle importiert (mit Ausnahme des magischen Befehls IPython).

Notizbuch auf der importierten Seite(test_module.ipynb)Eine bestimmte Zelle


# modcell
class TestModule:
    def __init__(self):
        pass

    def hello(self):
        print('Hello from TestModule')

Eine bestimmte Zelle im Notizbuch auf der Importseite


import test_module as mod

x = mod.TestModule()
x.hello()

modcell ignoriert IPython Magic-Befehle (Zeilen beginnend mit! Or% ). Mit anderen Worten, "% autoreload" und "%% time" werden beim Importieren durch "modcell" nicht ausgeführt.

Außerdem weiß ich nicht, ob modcell selbst% autoreload unterstützt, da ich es nicht getestet habe. Wir haben bestätigt, dass andere Notebooks neu geladen werden, wenn Sie "Alle neu starten und ausführen" ausführen.

kompilieren

Aufwärtskompatibel mit %% writefile. Gibt alle importierten Zellen in eine Datei aus.

import modcell as mods
import test_module

with open('module.py', mode='w') as f:
    mods.compile(out=f, source_info=True)

Es ist wie folgt formatiert.

module.py


# test_module.ipynb ---------
# ---

class TestModule:
    def __init__(self):
        pass
    
    def hello(self):
        print('Hello from TestModule')

# ---
# --------- test_module.ipynb

Der der Zelle entsprechende begrenzte Kommentar wird unter dem Gesichtspunkt des Debuggens usw. ausgegeben. Wenn er jedoch im Weg ist, wird er nicht ausgegeben, wenn "source_info = False" angegeben ist.

Importieren Sie nur Zellen mit bestimmten Tags aus .ipynb

Schreiben Sie einen Kommentar am Anfang der Zelle

test_module.Eine bestimmte Zelle von Ipynb


# modcell: tagname
class TestModule:
    def __init__(self):
        pass

    def hello(self):
        print('Hello from TestModule')

Sie können jeder Zelle nur ein Tag hinzufügen, indem Sie die Syntax von verwenden. Beim Importieren

import modcell as mods

mod = mods._import('test_module', tag='tagname')

x = mod.TestModule().hello()

Auf diese Weise können nur Zellen mit dem Tag "Tagname" gelesen werden.

In mehrere Moduldateien kompilieren

Standardmäßig erstellt "modcell" eine Instanz der "modcell.ModCell" -Klasse, und alle Funktionen werden als Methoden dieser Standardinstanz ausgeführt. Diese Standardinstanz kann mit der Funktion modcell.default () abgerufen werden, wird jedoch für die Benutzerinteraktion nicht empfohlen.

Benutzer können nach Bedarf mehrere ModCell-Instanzen erstellen.

import modcell as mods

mod_1 = mods.ModCell()
mod_2 = mods.ModCell()
...

Mit anderen Worten, Sie können mehrere ".py" -Dateien aus mehreren ".ipynb" -Dateien generieren, indem Sie den folgenden Code ausführen.

import modcell as mods

mod_debug = mods.ModCell()
nb1_debug = mod_debug._import('notebook_1', tag='debug')
nb2 = mod_debug._import('notebook_2')
nb3 = mod_debug._import('notebook_3')
with open('../module/mod_debug.py', mode='w') as f:
    mod_debug.compile(out=f)

mod_test = mods.ModCell()
nb1_test = mod_test._import('notebook_1', tag='test')
nb4 = mod_test._import('notebook_4')
with open('../module/mod_test.py', mode='w') as f:
    mod_test.compile(out=f)

Bonus

Eine andere Möglichkeit, die ich mir ausgedacht habe, bestand darin, "eine Verbindung zum IPython-Kernel herzustellen und den Inhalt der Codezellen anderer Notebooks abzurufen", aber es scheint, dass der Inhalt der Codezellen vom Front-End-JavaScript beibehalten wird. Der IPython-Kernel scheint jedoch nur den Code nach dem Parser zu enthalten, daher war dies eine schlechte Idee.

https://stackoverflow.com/questions/51121647/get-the-current-contents-of-the-entire-jupyter-notebook

Recommended Posts

Importieren Sie bestimmte Zellen aus anderen Notizbüchern mit Jupyter-Notizbuch
Verwenden von Graphviz mit Jupyter Notebook
Verwenden Sie pip mit Jupyter Notebook
Verwenden Sie Cython mit Jupyter Notebook
Spielen Sie mit Jupyter Notebook (IPython Notebook)
Serververwaltung mit Jupyter (1) -Import
Ermöglichen Sie externe Verbindungen mit dem Jupiter-Notebook
Formatieren mit autopep8 auf Jupyter Notebook
Visualisieren Sie den Entscheidungsbaum mit einem Jupyter-Notizbuch
Machen Sie einen Sound mit Jupyter Notebook
Markdown mit Jupyter-Notebook verwenden (mit Verknüpfung)
Fügen Sie mit Jupyter Notebook weitere Kernel hinzu
Bequeme Analyse mit Pandas + Jupyter Notebook
Einstellungen zum Lesen von S3-Dateien mit Pandas aus Jupyter Notebook unter AWS
Verwenden Sie nbextensions mit Anacondas Jupyter-Notizbuch
Verwenden von Apache Spark mit Jupyter Notebook (IPython Notebook)
Ich möchte einen Blog mit Jupyter Notebook schreiben
Verwenden Sie Jupyter Lab und Jupyter Notebook mit EC2
Probieren Sie SVM mit scikit-learn auf Jupyter Notebook aus
Verwenden Sie BigQuery von Ihrem lokalen Jupyter Notebook
So importieren Sie Ihr eigenes Modul mit jupyter
Verwendung des Jupyter-Notebooks mit ABCI
Verknüpfung von Python und JavaScript mit dem Jupiter-Notizbuch
[Jupyter Notebook Memo] Kanji mit Matplotlib anzeigen
Reichhaltige Zellenausgabe mit Jupyter Notebook (IPython)
Verwenden Sie das Jupyter-Notebook, indem Sie eine Verbindung von einem anderen Host herstellen
So debuggen Sie mit Jupyter oder iPython Notebook
Erstellen einer Analyseumgebung mit Docker (Jupyter Notebook + PostgreSQL)
Datenanalyse zur Verbesserung von POG 2 ~ Analyse mit Jupiter-Notebook ~
Aktivieren Sie Jupyter Notebook mit conda auf dem Remote-Server
Konvertieren Sie Jupyter-Notizbücher ganz einfach in Blogs mit Fastpages
Versuchen Sie, die virtuelle Umgebung von conda mit Jupyter Notebook zu verwenden
Füllen Sie die Breite des Jupyter-Notizbuchs, um den Browser zu füllen
Massen-Download-Bilder von einer bestimmten URL mit Python
Grafikzeichnung mit Jupyter (Ipython-Notizbuch) + Matplotlib + Vagabund