406 Stimmen

Wie konvertiere ich ein IPython Notebook über die Befehlszeile in eine Python-Datei?

Ich erwäge, die *.ipynb -Dateien als Quelle der Wahrheit zu verwenden und sie programmgesteuert in .py-Dateien für geplante Jobs/Aufgaben zu 'kompilieren'.

Der einzige Weg, den ich kenne, um das zu tun, ist über die GUI. Gibt es einen Weg, es über die Befehlszeile zu tun?

603voto

wwwilliam Punkte 8542

Wenn Sie nicht jedes Mal ein Python-Skript ausgeben möchten, wenn Sie speichern, oder wenn Sie den IPython-Kernel nicht neu starten möchten:

Auf der Befehlszeile können Sie nbconvert verwenden:

$ jupyter nbconvert --to script [DEIN_NOTEBOOK].ipynb

Als kleine Lösung können Sie sogar den obigen Befehl in einem IPython-Notebook aufrufen, indem Sie ! (für beliebige Befehlszeilenargumente) voranstellen. Innerhalb eines Notebooks:

!jupyter nbconvert --to script config_template.ipynb

Vor der Hinzufügung von --to script wurde die Option --to python oder --to=python genannt, aber sie wurde bei der Umstellung auf ein sprachunabhängiges Notebook-System umbenannt.

137voto

Břetislav Hájek Punkte 3026

Wenn Sie alle *.ipynb Dateien aus dem aktuellen Verzeichnis in ein Python-Skript konvertieren möchten, können Sie den Befehl wie folgt ausführen:

jupyter nbconvert --to script *.ipynb

26voto

Valentas Punkte 1734

Hier ist eine schnelle und schmutzige Methode, um den Code aus V3 oder V4 ipynb ohne Verwendung von ipython zu extrahieren. Es überprüft nicht die Zellentypen usw.

import sys,json

f = open(sys.argv[1], 'r') #input.ipynb
j = json.load(f)
of = open(sys.argv[2], 'w') #output.py
if j["nbformat"] >=4:
        for i,cell in enumerate(j["cells"]):
                of.write("#Zelle "+str(i)+"\n")
                for line in cell["source"]:
                        of.write(line)
                of.write('\n\n')
else:
        for i,cell in enumerate(j["worksheets"][0]["cells"]):
                of.write("#Zelle "+str(i)+"\n")
                for line in cell["input"]:
                        of.write(line)
                of.write('\n\n')

of.close()

20voto

Wayne Punkte 5452

Jupytext ist gut zu haben in Ihrem Werkzeugkasten für solche Konvertierungen. Es ermöglicht nicht nur die Konvertierung von einem Notizbuch zu einem Skript, sondern Sie können auch wieder zurück vom Skript zum Notizbuch. Und sogar dieses Notizbuch in ausgeführter Form haben.

jupytext --to py notebook.ipynb                 # konvertiert notebook.ipynb in eine .py Datei
jupytext --to notebook notebook.py              # konvertiert notebook.py in eine .ipynb Datei ohne Ausgaben
jupytext --to notebook --execute notebook.py    # konvertiert notebook.py in eine .ipynb Datei und führt es aus

20voto

Spawnrider Punkte 1657

Nach dem vorherigen Beispiel, aber mit der neuen nbformat Lib-Version :

import nbformat
from nbconvert import PythonExporter

def convertNotebook(notebookPath, modulePath):

  with open(notebookPath) as fh:
    nb = nbformat.reads(fh.read(), nbformat.NO_CONVERT)

  exporter = PythonExporter()
  source, meta = exporter.from_notebook_node(nb)

  with open(modulePath, 'w+') as fh:
    fh.writelines(source.encode('utf-8'))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X