2013-10-05 2 views
11

Ich kenne die %load Funktion (früher %loadpy), die den Inhalt einer Datei (oder URL, ...) in eine neue Eingabezelle lädt (die danach ausgeführt werden kann).Wie zeigt man (als Ausgabezelle) den Inhalt einer .py-Datei mit Syntax-Highlighting an?

Ich bin auch bewusst %less, %more und %pycat, die den Inhalt einer Datei in einem Pager zeigen (die im Notebook bedeutet es im Split-Fenster am unteren Rand des Bildschirms angezeigt wird).

Gibt es einen (magischen) Befehl, um eine Datei zu laden und ihren Inhalt (mit Syntaxhervorhebung) in einer Ausgabezelle anzuzeigen?

I.e. so etwas wie die folgenden, aber mit Syntaxhervorhebung des Ergebnisses:

with open('my_file.py', 'r') as f: 
    print(f.read()) 

Ich möchte der Dateiinhalt mit der .ipynb Datei gespeichert werden, aber ich will sie nicht ausgeführt werden, wenn ich Zelle -> Ausführen Alle.

Gibt es einen Befehl ähnlich %psource, der den Quellcode in einer Ausgabezelle anstelle von Pager zeigt?

+0

Für das Protokoll, ich habe gerade gesehen, dass es ein Gist für die ganze Zeit gewesen ist: https://gist.github.com/jiffyclub/5385501 – Matthias

Antwort

2

Nein, es gibt keine Möglichkeit, dies mit aktuellen Magics zu tun, aber es ist ziemlich einfach mit pygments und IPython.display.HTML(...) zurückgeben.

11

Beispielcode basiert auf Antwort von @ Matt:

from pygments import highlight 
from pygments.lexers import PythonLexer 
from pygments.formatters import HtmlFormatter 
import IPython 

with open('my_file.py') as f: 
    code = f.read() 

formatter = HtmlFormatter() 
IPython.display.HTML('<style type="text/css">{}</style>{}'.format(
    formatter.get_style_defs('.highlight'), 
    highlight(code, PythonLexer(), formatter))) 
Verwandte Themen