欢迎访问宙启技术站
智能推送

使用Pygments.lexers高亮显示Python代码

发布时间:2023-12-13 10:55:22

Pygments是一个用于语法高亮显示的Python库。它提供了许多不同的语言的语法解析器和样式,可以将代码高亮显示为HTML、CSS、TeX等格式。其中,Pygments提供的lexers模块包含了许多语言的解析器。在本篇文章中,我们将使用Pygments.lexers来高亮显示Python代码,并给出一些例子。

首先,我们需要安装Pygments库。可以使用pip命令来安装:

pip install Pygments

接下来,我们将使用python模块作为例子来高亮显示Python代码。首先,我们需要导入lexers模块,并使用get_lexer_by_name方法来获取Python语言的解析器:

from pygments.lexers import get_lexer_by_name

lexer = get_lexer_by_name('python')

然后,我们可以使用解析器的get_tokens方法将代码转换为一系列的Token,每个Token代表代码中的一个组成部分,比如关键字、变量名、字符串等。我们可以通过调用Token的__str__方法来获取Token的文本表示。下面的例子展示了如何将一段Python代码转换为Token,并打印出Token的文本表示:

from pygments.lexers import get_lexer_by_name
from pygments import highlight
from pygments.token import Token

lexer = get_lexer_by_name('python')

code = '''
x = 10
y = 20

print("Sum:", x + y)
'''

tokens = lexer.get_tokens(code)

for token_type, token_value in tokens:
    print(token_type, token_value)
    print(token_type, repr(token_value))

上述代码中,我们首先定义了一段Python代码,然后使用解析器的get_tokens方法将代码转换为Token。接着,我们使用一个循环来遍历所有的Token,并打印出Token的类型和文本表示。通过调用repr函数,我们可以将Token的文本表示转换为可打印的字符串。

当我们运行上述代码时,可以看到以下输出:

Token.Keyword.Declaration Python
Token.Text 
Token.Name.Variable x
Token.Text  
Token.Operator.Assignment =
Token.Text  
Token.Literal.Number.Integer 10

...

Token.Comment.Hashbang #!/usr/bin/env python

上述输出展示了代码中的各个部分,比如关键字、变量名、运算符、数字和注释。

除了将代码转换为Token外,Pygments还提供了一个highlight函数,可以将Token转换为带有样式的文本。我们可以使用一个样式生成器来定义样式,比如get_style_by_name方法可以获取一个预定义的样式。下面的例子展示了如何将Token转换为带有样式的HTML文本:

from pygments.lexers import get_lexer_by_name
from pygments import highlight
from pygments.formatters import HtmlFormatter

lexer = get_lexer_by_name('python')
formatter = HtmlFormatter(style='friendly')

code = '''
x = 10
y = 20

print("Sum:", x + y)
'''

highlighted_code = highlight(code, lexer, formatter)

print(highlighted_code)

上述代码中,我们首先导入了HtmlFormatter模块,并获取一个预定义的样式。然后,我们使用highlight函数将代码转换为带有样式的HTML文本。最后,我们将高亮显示的HTML代码打印出来。

当我们运行上述代码时,可以看到以下输出:

<div class="highlight">
<table class="highlighttable">
<tr>
<td class="linenos">
<div class="linenodiv"><pre>1
2
3
4
5</pre></div>
</td>
<td class="code">
<div class="highlight"><pre><span></span><span class="k">x</span> <span class="o">=</span> <span class="mi">10</span>
<span class="k">y</span> <span class="o">=</span> <span class="mi">20</span>

<span class="k">print</span><span class="p">(</span><span class="s">"Sum:"</span><span class="p">,</span> <span class="n">x</span> <span class="o">+</span> <span class="n">y</span><span class="p">)</span>
</pre></div>
</td>
</tr>
</table>
</div>

上述输出是一个带有样式的HTML代码,可以通过在网页中加载该HTML代码来显示高亮的Python代码。

总结来说,Pygments库提供了一种简单方便的方式来高亮显示代码。通过使用lexers模块,我们可以将代码转换为Token,并打印出Token的文本表示。此外,Pygments还提供了一个highlight函数,可以将Token转换为带有样式的文本。希望这个使用示例能够帮助你更好地理解Pygments库的应用。