Wie lade / bearbeite / führe / speichere ich Textdateien (.py) in eine IPython-Notebookzelle?

232

Ich bin kürzlich dazu übergegangen, IPython-Notebooks als Teil meines Workflows zu verwenden. Es ist mir jedoch nicht gelungen, eine Möglichkeit zu finden, .py-Dateien in die einzelnen Zellen eines geöffneten IPython-Notizbuchs zu importieren, damit sie bearbeitet, ausgeführt und dann gespeichert werden können. Kann das gemacht werden?

Ich habe dies in der Dokumentation gefunden, die mir sagt, wie man .py-Dateien als neue Notizbücher importiert, aber dies entspricht nicht dem, was ich erreichen möchte.

Anregungen wäre sehr dankbar.

aaronsstack
quelle
6
Gute Frage. Ich habe noch keine wirklich befriedigende Antwort gesehen. Dies ist besonders wichtig, wenn Sie ein IPython-Notebook über das Internet bereitstellen. Wenn Benutzer den Quellcode der importierten Funktionen anzeigen / bearbeiten möchten (mit Syntaxhervorhebung usw.), gibt es derzeit keine einfache Möglichkeit, dies zu tun. Es sollte möglich sein, nur py-Dateien zu öffnen, ohne sie in ipynb-Dateien umzuwandeln.
Peter

Antworten:

306

BEARBEITEN : Ab IPython 3 (jetzt Jupyter-Projekt) verfügt das Notebook über einen Texteditor, der als bequemere Alternative zum Laden / Bearbeiten / Speichern von Textdateien verwendet werden kann.

Eine Textdatei kann mit dem Befehl magic in eine Notizbuchzelle geladen werden %load.

Wenn Sie eine Zelle ausführen, die Folgendes enthält:

%load filename.py

Der Inhalt von filename.pywird in die nächste Zelle geladen. Sie können es wie gewohnt bearbeiten und ausführen.

Um den Zelleninhalt wieder in einer Datei zu speichern, fügen Sie die Zellenmagie %%writefile filename.pyam Anfang der Zelle hinzu und führen Sie sie aus. Beachten Sie, dass eine Datei mit demselben Namen, die bereits vorhanden ist, stillschweigend überschrieben wird .

Um die Hilfe für einen magischen Befehl anzuzeigen, fügen Sie ein ?: like %load?oder hinzu %%writefile?.

Für allgemeine Hilfe zu magischen Funktionen geben Sie "% magic" ein. Verwenden Sie% lsmagic, um eine Liste der verfügbaren magischen Funktionen anzuzeigen. Geben Sie für eine Beschreibung eines dieser Elemente% magic_name? Ein, z. B. '% cd?'.

Siehe auch: Magic-Funktionen aus den offiziellen IPython-Dokumenten.

user2304916
quelle
3
Dies und das %save -fscheint der Weg zu sein, das zu tun, wonach ich gesucht habe. Vielen Dank!
aaronsstack
2
save -fist eine Art indirekte Methode zum Speichern in einer Datei und funktioniert nur, wenn Sie zuerst die Zelle ausführen und dann die richtige Referenz angeben. Im Allgemeinen ist es einfacher zu verwenden, %%writefilewenn die aktuelle Zelle in eine Datei geschrieben wird. Ich habe die Antwort aktualisiert, um dies zu erwähnen.
user2304916
4
Der neue magische Befehl ist derzeit %loadpy(anstelle von %load).
AlQuemist
1
Laut ipython.org/ipython-doc/3/interactive/magics.html ist die Verwendung in Zukunft%load in Ordnung: " %loadpy ( Alias ​​of %load ) - %loadpyhat an Flexibilität gewonnen und die Anforderung einer .pyErweiterung fallen gelassen . Daher wurde sie einfach in umbenannt Weitere Informationen finden %loadSie in der %loadDokumentzeichenfolge. "
Michael
118

Schreiben / Speichern

%%writefile myfile.py

  • Schreiben / Speichern von Zelleninhalten in myfile.py ( -azum Anhängen verwenden). Ein weiterer Alias:%%file myfile.py

Laufen

%run myfile.py

  • Führen Sie myfile.py aus und geben Sie die Ergebnisse in der aktuellen Zelle aus

Laden / Importieren

%load myfile.py

  • Laden Sie "import" myfile.py in die aktuelle Zelle

Für mehr Magie und Hilfe

%lsmagic

  • liste alle anderen coolen zellmagiebefehle auf.

%COMMAND-NAME?

  • Hilfe zur Verwendung eines bestimmten Befehls. dh%run?

Hinweis

Neben den zellmagischen Befehlen ist das IPython-Notizbuch (jetzt Jupyter-Notizbuch) so cool, dass Sie jeden Unix-Befehl direkt aus der Zelle heraus verwenden können (dies entspricht auch der Verwendung des %%bashzellmagischen Befehls).

Um einen Unix-Befehl in der Zelle auszuführen, stellen Sie Ihrem Befehl einfach ein !Zeichen voran. beispielsweise:

  • !python --version Sehen Sie sich Ihre Python-Version an
  • !python myfile.pyFühren Sie myfile.py aus und geben Sie die Ergebnisse in der aktuellen Zelle aus %run(siehe den Unterschied zwischen !pythonund %runin den Kommentaren unten).

Weitere Erklärungen mit Beispielen finden Sie in diesem nbviewer . Hoffe das hilft.

Aziz Alto
quelle
1
Danke, ich benutze Windows und habe versucht! Dir, Ausgabe !dir Volume in drive D is Documentsetc ... Es ist also nicht nur Bash, sondern auch Cmd!
Brian
1
@iamaziz Ich denke du meintest !python --version(Tippfehler)
Alexandre
5
Aziz, das ist eine ausgezeichnete Antwort. Eine kleine Anmerkung: Es ist etwas anders zu verwenden %run myfile.pyals im Gegensatz zu !python myfile.py. Wenn Sie das erstere tun, wird es mit dem ipython-Kernel ausgeführt, einschließlich des konfigurierten Vorladens. Ein kleines Problem, aber ich bin heute auf einen Fehler gestoßen, der für mich einen Unterschied gemacht hat.
Tristan Reid
Wenn Sie %run myfile.pydas in dieser Antwort beschriebene Äquivalent ausführen möchten, während Sie IPython Cell Magic-Befehle in Ihr Skript aufnehmen, verwenden Sie %run myfile.ipy.
Wayne
8

Ziehen Sie eine Python-Datei per Drag & Drop in die "Home" -Notizbuch-Tabelle der Ipython-Notizbücher und klicken Sie auf Hochladen. Dadurch wird ein neues Notizbuch mit nur einer Zelle erstellt, die den Inhalt Ihrer .py-Datei enthält

Sonst kopiere / füge es aus deinem Lieblingseditor ein;)

Raphaël Braud
quelle
1
Vielen Dank für Ihre Antwort, aber wie ich in meinem Beitrag erwähnt habe, möchte ich vermeiden, jedes Mal ein neues Notizbuch zu erstellen, sondern das .py-Skript in einer Zelle eines vorhandenen Notizbuchs verwalten.
aaronsstack
Beheben Sie mich, wenn ich falsch liege: Sie möchten das Notizbuch nicht als Texteditor verwenden? (Ich meine: Jede Änderung in der Zelle ändert nichts an der .py-Datei). Übrigens habe ich keine Ahnung, wie man einen .py-Inhalt in eine Zelle einfügt. Ich kopiere / füge meinen Code immer ein, wenn nötig ... Entschuldigung
Raphaël Braud
5

Ich fand es zufriedenstellend, ls und cd in ipython notebook zu verwenden, um die Datei zu finden. Geben Sie dann cat your_file_name in die Zelle ein und Sie erhalten den Inhalt der Datei zurück, die Sie dann als Code in die Zelle einfügen können.

RussellStewart
quelle
!cat "file.txt"
Enrique Pérez Herrero