Как показать (в качестве выходной ячейки) содержимое файла .py с подсветкой синтаксиса?

Мне известна функция %load (ранее %loadpy), которая загружает содержимое файла (или URL,...) в новую ячейку ввода (которую можно выполнить впоследствии).

Я также знаю о %less, %more и %pycat, которые показывают содержимое файла в пейджере (что означает, что в записной книжке оно отображается в разделенном окне внизу экрана).

Есть ли (волшебная) команда для загрузки файла и отображения его содержимого (с подсветкой синтаксиса) в выходной ячейке?

т.е. что-то вроде следующего, но с подсветкой синтаксиса результата:

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

Я хочу, чтобы содержимое файла сохранялось вместе с файлом .ipynb, но я не хочу, чтобы он выполнялся, когда я выполняю команду Cell -> Run All.

Есть ли команда, похожая на %psource, которая показывает исходный код в выходной ячейке вместо пейджера?


person Matthias    schedule 05.10.2013    source источник
comment
Для протокола: я только что видел, что для этого все время существовал Gist: gist.github. com/jiffyclub/5385501   -  person Matthias    schedule 01.03.2018


Ответы (2)


Нет, нет способа сделать это с текущей магией, но это довольно просто, используя pygments и возвращая IPython.display.HTML(...) .

person Matt    schedule 06.10.2013

Пример кода на основе ответа @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)))
person jgosmann    schedule 21.01.2014