webentwicklung-frage-antwort-db.com.de

Zeilenumbrüche in ipython hinzufügen

Wenn Sie in iPython eine for-Schleife oder einen mehrzeiligen Befehl einfügen, wie gehe ich zurück und füge Zeilen hinzu? Ich habe folgendes ausgeführt:

for row in table.find_all('tr'):
    cells = row.find_all('td')
    for c,cell in enumerate(cells):
        print c,":",cell.get_text().strip()
    try:
        this = cells[0]
        that = cells[1]
        the_docket = cells[2]
        other_thign = cells[3]
        jumble = re.sub('\s+',' ',str(cells[5])).strip()            
    except:
        "Nope"

Und mir wurde klar, dass ich eine Zeile hinzufügen muss, aber ich kann nicht einfach in iPython die Eingabetaste drücken, um den Befehl auszuführen. Kann ich diesen mehrzeiligen Befehl in iPython bearbeiten?

49
Amanda

Das %edit Mit der Magic-Funktion in iPython können Sie Code in Ihrem bevorzugten Editor bearbeiten und ihn dann so ausführen, als ob er direkt eingegeben worden wäre. Sie können auch Code bearbeiten, den Sie bereits in die Repl eingegeben haben, da er in einer speziellen Variablen gespeichert ist. Beispiel:

In [1]: def foo(x):
   ...:     print x
   ...:     
In [2]: %edit _i1
50
yonilevy

Es gibt auch eine Möglichkeit, eine neue Zeile direkt in die Replik einzufügen: Strg-V, Strg-J

Mit Strg-V können Sie im Grunde einen Steuercode senden, und dann ist Strg-J der Code für eine neue Zeile (Zeilenvorschub). Es ist etwas umständlich zu tippen, hat aber den Vorteil, dass es sowohl in der regulären Python Shell als auch in Bash selbst funktioniert.

Bearbeiten: Zumindest in iTerm2 können Sie es auch einem einzelnen Hotkey zuweisen. Ich setze ctrl-enter auf "Send hex codes" von 0x16 0x0a. Könnte auch cmd-enter oder was auch immer verwenden.

52
ShawnFumo

Ich leide seit einiger Zeit an diesem Problem. Ich habe das gerade bei der Verwendung gefunden Ctrl-qCtrl-j (Das ist Kleinbuchstabe Q, J, keine Notwendigkeit, die zu halten shift key) fügt einer bestehenden IPython-Editiersitzung einen Zeilenvorschub hinzu.

for li in some_list: print(li)    

Bewegen Sie den Cursor nach dem Doppelpunkt und drücken Sie Ctrl-qCtrl-j

for li in some_list:
print(li)

IPython: 5.2.1, iTerm2: 3.0.15, macOS: 10.12.6

51
JS.

Sie können ctrl+on (d. h. drücken Sie die Steuertaste und geben Sie die Zeichen 'o' und 'n' ein, während Sie sie gedrückt halten). Sie können es auch in zwei Schritten tun - ctrl+octrl+n aber ich finde das erstere einfacher.

  • ctrl-o - in den Multiline-Modus wechseln
  • ctrl-n - Zugriff auf den Befehlsverlauf für die Zukunft. Da es jedoch keinen Vorwärtsverlauf gibt, springt der Cursor nur zur nächsten Zeile.

Ich habe überprüft, ob es mit IPython 5.3.0 und IPython 7.3.0 auf einem Computer mit git bash 2.18.0 + Windows 7 funktioniert.

7

Der Vollständigkeit halber: Neuere IPython-Versionen (0.11+) haben eine sehr schöne grafische Konsole, mit der Sie mit den Pfeilen durch Ihren Code navigieren und den Cursor sogar mit der Maus neu positionieren können.

In mehrzeiligen Anweisungen übernehmen einige Tasten eine spezielle Funktion (Pfeile zum Navigieren, Enter um einen Zeilenumbruch und andere einzufügen). Sie müssen den Cursor am Ende der letzten Zeile der Anweisung positionieren, um das Standardverhalten zu erhalten, z. Nimm den Pfeil nach oben  bedeutet "vorherige Anweisung" anstelle von "Cursor in die vorherige Zeile bewegen". Oder bekommen Enter bedeutet "Code ausführen" anstelle von "Zeilenumbruch in der Mitte des Codes einfügen".

Die Dokumentation ist etwas spärlich und auf verschiedene Seiten aufgeteilt. Hier sind die drei wichtigsten Links für den Einstieg:

  1. Einführung in die Qt-Konsole
  2. Konfigurieren von IPython mit Nice-Profildateien pro Benutzer anstelle von Befehlszeilenargumenten

    Sie interessieren sich für die ipython_qtconsole_config.py

  3. Wie bekomme ich eine grafische ipython-Konsole unter Windows 7?

5
Emanuil Tolev

Eine einfache Möglichkeit ist die Verwendung von ;\ Operator. ; um zu signalisieren, dass es das Ende eines Befehls ist und \, um anzugeben, dass der Befehl in einer neuen Zeile wie folgt lautet:

In[4]: password = "123";\
       username = "alpha"

Auf diese Weise können Sie in ipython mehrere Zeilenbefehle ausführen, ohne den Editor aufzurufen

5
alpha_989

Geben Sie Ctrl+q Und dann Enter ein. Wie bereits erwähnt, können Sie mit Ctrl+q Einen Zeichencode senden. Wenn Sie jedoch Ctrl+q Drücken, ist Enter möglicherweise natürlicher als Ctrl+q Und dann Ctrl+j.

Eine andere Möglichkeit besteht darin, ( Und anschließend Enter einzugeben, ( Zu schreiben und anschließend zu löschen. Diese Lösung ähnelt der, bei der Sie ;\ Eingeben, um anzuzeigen, dass die Anweisung nicht vollständig ist.

3