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

Lesezeit: 6 Minuten

Benutzer-Avatar von Stefan Krawczyk
Stefan Krawczyk

Ich überlege, das zu verwenden *.ipynb Dateien als Quelle der Wahrheit und „kompilieren“ sie programmgesteuert in .py-Dateien für geplante Jobs/Aufgaben.

Die einzige Möglichkeit, die ich verstehe, ist die Verwendung der GUI. Gibt es eine Möglichkeit, dies über die Befehlszeile zu tun?

  • Was meinst du mit „Quelle der Wahrheit“? IPython-Notebooks sind nur JSON-Dateien. Sie können sie laden und als Python-Wörterbücher bearbeiten. Für den Quellcode sollten Sie iterieren input Schlüssel wo cell_type entspricht ‘Code’. Guck dir das an planen

    – Theta

    13. Juni 2013 um 1:03


  • Nun, ich möchte die .ipynb-Datei in einem Repository speichern und nicht die .py-Dateien. Als „Build-Schritt“ würde ich dann die .ipynb-Dateien in .py-Dateien konvertieren, damit sie tatsächlich vom automatisierten System verwendet werden können. Du hast recht, ich könnte einfach den JSON laden und nur die Codezellen ausgeben, aber ich habe mich gefragt, ob es da draußen schon etwas gibt, das das für mich erledigt 🙂

    – Stefan Krawczyk

    13. Juni 2013 um 1:17


Benutzer-Avatar von wwwilliam
wwwilliam

Wenn Sie nicht bei jedem Speichern ein Python-Skript ausgeben oder den IPython-Kernel nicht neu starten möchten:

Auf der Befehlszeilekönnen Sie verwenden nbconvert:

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

Als kleiner Hack, Sie können sogar den obigen Befehl aufrufen In ein IPython-Notebook durch Voranstellen ! (wird für jedes Befehlszeilenargument verwendet). In einem Notizbuch:

!jupyter nbconvert --to script config_template.ipynb

Vor --to script War hinzugefügtdie Option war --to python oder --to=pythonaber es war umbenannt auf dem Weg zu einem sprachunabhängigen Notizbuchsystem.

  • Wenn Sie bei jedem Speichervorgang einen haben möchten, klicken Sie hier jupyter Du kannst auslösen nbconvert über Pre- oder Post-Save-Hooks: ContentsManager.pre_save_hook abd FileContentsManager.post_save_hook. Sie würden einen Post-Save-Hook hinzufügen jupyter nbconvert --to script [notebook]

    – jaimedash

    3. Mai 2016 um 16:35 Uhr


  • Gibt es eine Möglichkeit, das Gegenteil zu tun, dh von einem Python-Skript in ein Notebook zu konvertieren? Zum Beispiel: Haben Sie einige spezielle Dokumentzeichenfolgen, die in Zellen analysiert werden?

    – Sujen Shah

    17. Januar 2017 um 17:40 Uhr

  • Konvertieren Sie alle Notizbücher in einem Ordner jupyter nbconvert --to script /path/to/notebooks/*.ipynb

    – openwonk

    22. Juli 2017 um 0:00 Uhr


  • Danke, es funktioniert!, aber was ist, wenn ich das nicht möchte? # In[ ]: Geben Sie Dinge in das Skript ein, ich möchte, dass es sauber ist. Gibt es eine Möglichkeit, das zu tun?

    – Rishabh Agrahari

    31. Januar 2018 um 10:48

  • @RishabhAgrahari Folgendes scheint für mich zu funktionieren. !jupyter nbconvert --to script --no-prompt notebook.ipynb

    – Bytestorm

    27. Mai 2019 um 7:09


Benutzeravatar von Břetislav Hájek
Břetislav Hájek

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

jupyter nbconvert --to script *.ipynb

  • Oder Sie können Folgendes ausführen: ipython nbconvert –to script *.ipynb

    – Andrej

    23. Dezember 2020 um 11:28

  • Um programmgesteuert wie in einer Funktion zu konvertieren, verwenden Sie diese Syntax: subprocess.run([‘jupyter’, ‘nbconvert’,ipynb_file,”–to”, “script”,”–output”,r’temp_converted_py’],shell=True) beachten Sie, dass ipynb_file eine Variable ist

    – Benutzer15420598

    28. Dezember 2021 um 18:49 Uhr


Hier ist eine schnelle und schmutzige Möglichkeit, den Code aus V3 oder V4 ipynb zu extrahieren, ohne ipython zu verwenden. Zelltypen usw. werden nicht überprüft.

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("#cell "+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("#cell "+str(i)+"\n")
                for line in cell["input"]:
                        of.write(line)
                of.write('\n\n')

of.close()

  • Beste Antwort, wenn Sie keines der Jupyter-Tools installieren möchten.

    – dacracot

    3. Okt. 2016 um 14:38

  • Ich mag das. Aber als ich das .py-Format von Jupyter-Notebooks herunterlade, habe ich herausgefunden, dass es UNIX-Zeilenenden verwendet, obwohl ich unter Windows arbeite. Um dasselbe zu generieren, fügen Sie das hinzu newlines='\n' als drittes Argument im Aufruf der offenen Ausgabedatei. (Python 3.x)

    – RufusVS

    30. Mai 2019 um 19:19 Uhr


  • Diese Antwort eröffnet die Möglichkeit, Tags zu lesen und nur die Zellen zu extrahieren, die sie enthalten. Über die Befehlszeile allein ist das schwieriger.

    – Pablo Adames

    9. August 2020 um 23:57 Uhr

Waynes Benutzeravatar
Wayne

Jupytext ist schön, es für solche Konvertierungen in Ihrer Toolchain zu haben. Es ermöglicht nicht nur die Konvertierung von einem Notizbuch in ein Skript, sondern Sie können auch wieder vom Skript in ein Notizbuch zurückkehren. Und lassen Sie das Notizbuch sogar in ausgeführter Form anfertigen.

jupytext --to py notebook.ipynb                 # convert notebook.ipynb to a .py file
jupytext --to notebook notebook.py              # convert notebook.py to an .ipynb file with no outputs
jupytext --to notebook --execute notebook.py    # convert notebook.py to an .ipynb file and run it 

Befolgen Sie das vorherige Beispiel, jedoch mit dem Neue 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'))

  • Die letzte Codezeile von fh.writelines(source.encode(‘utf-8’)) gibt ‘TypeError: write() Argument muss str sein, nicht int’. fh.writelines(source) funktioniert jedoch.

    – BarryC

    18. Okt. 2016 um 5:43

  • Hatte das gleiche Problem, das durch Löschen des behoben wurde .encode('utf-8') Stück in der letzten Zeile.

    – LFoos24

    28. Juni 2021 um 17:18 Uhr

  • Ich habe das Problem mit der letzten Zeile beim Schreiben gelöst fh.write(source) anstatt fh.writelines(...).

    – mosc9575

    24. November 2021 um 14:33 Uhr

Benutzeravatar von wwwslinger
wwwslinger

Sie können dies über die IPython-API tun.

from IPython.nbformat import current as nbformat
from IPython.nbconvert import PythonExporter

filepath="path/to/my_notebook.ipynb"
export_path="path/to/my_notebook.py"

with open(filepath) as fh:
    nb = nbformat.reads_json(fh.read())

exporter = PythonExporter()

# source is a tuple of python source code
# meta contains metadata
source, meta = exporter.from_notebook_node(nb)

with open(export_path, 'w+') as fh:
    fh.writelines(source)

  • Die letzte Codezeile von fh.writelines(source.encode(‘utf-8’)) gibt ‘TypeError: write() Argument muss str sein, nicht int’. fh.writelines(source) funktioniert jedoch.

    – BarryC

    18. Okt. 2016 um 5:43

  • Hatte das gleiche Problem, das durch Löschen des behoben wurde .encode('utf-8') Stück in der letzten Zeile.

    – LFoos24

    28. Juni 2021 um 17:18 Uhr

  • Ich habe das Problem mit der letzten Zeile beim Schreiben gelöst fh.write(source) anstatt fh.writelines(...).

    – mosc9575

    24. November 2021 um 14:33 Uhr

Sachin Hatikankans Benutzeravatar
Sachin Hatikankan

Ich verstehe, dass dies ein alter Thread ist. Ich hatte das gleiche Problem und wollte die .pynb-Datei über die Befehlszeile in eine .py-Datei konvertieren.

Meine Suche führte mich dorthin ipynb-py-convert

Indem ich die folgenden Schritte befolgte, konnte ich eine .py-Datei erhalten

  1. Installieren Sie „pip install ipynb-py-convert“
  2. Gehen Sie über die Eingabeaufforderung in das Verzeichnis, in dem die IPYNB-Datei gespeichert ist
  3. Geben Sie den Befehl ein

> ipynb-py-convert YourFileName.ipynb YourFilename.py

Z.B:. ipynb-py-convert Getting-started-with-kaggle-titanic-problem.ipynb getting-started-with-kaggle-titanic-problem.py

Der obige Befehl erstellt ein Python-Skript mit dem Namen „YourFileName.py“ und wird gemäß unserem Beispiel erstellt getting-started-with-kaggle-titanic-problem.py Datei

1450280cookie-checkWie konvertiere ich ein IPython-Notebook über die Befehlszeile in eine Python-Datei?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy