Python pygments库

Python pygments库

简单介绍
pygments是一个将代码格式化的Python库,可以将代码格式化为html代码、图片、rtf文件等多种格式。
官网:pygments.org
PyPI:pygments

安装

pip install pygments

如果警告pip版本过低需要升级,那么只需要这样做

python -m pip install -U pip

简单使用

一下内容摘取自官网,并在此基础上稍作改动:

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

code = 'print "Hello World"'
print(highlight(code, lexer=PythonLexer(), formatter=HtmlFormatter()))

并且会看到像这样的输出:

<div class="highlight">
<pre><span class="k">print</span> <span class="s">"Hello World"</span></pre>
</div>

详解:
highlight->用于生成格式化之后的代码,生成的格式由后面的formatter决定
lexer->译做词法分析程序,用于判断当前输入的代码属于哪种编程语言(C、C++、Python、Java等)
formatter->格式化选项,这里是格式化为html代码,也可以格式化为.png、.jpg格式的图片等

自动推断语言
使用PythonLexer等lexer时我们还需要手动指定需要分析的编程语言,但是有的时候我们无法提前知道需要格式化的语言是什么,这个时候就需要使用pygments提供的语言猜测功能了。

formatters

pygments库中提供了众多的formatter,可以转化成多种形式的输出形式,可以是(富)文本,可以是图片,也可以直接输出在终端上,下面挑选几个进行介绍。
官网说明

common
所有的formatter都会有的参数

encoding:指定输入的代码的编码格式
style:指定代码高亮的风格,可以在pygments.styles包里面找到,常用的风格有:
default
vs
vim
emacs
xcode
colorful
fruity

outencoding:这个和命令行的操作有关,这里暂时不会使用到
HtmlFormatter
用于将一段代码转换成html代码,下面是官网上面的快速指导:

<div class="highlight">
<pre><span class="k">print</span> <span class="s">&quot;Hello World&quot;</span></pre>
</div>

这里讲一下几个常用的参数:

full/bool:如果指定为True,那么不必为html另外生成css文件,所有的样式都会写在html文件里面

style/str:指定代码高亮风格,前文已经有所介绍,因此不再赘述

noclasses/bool:如果设置为True,那么所有的样式不再以类的形式出现,而是使用内联样式

linenos/str:如果设置成table,那么生成的html最外面不是div标签,而是table标签,将行号和代码分开;如果设置成inline,那么行号就会和代码放在一起

优点是可以生成html代码之后自己手动处理html代码,对其进行更进一步的操作,比如写入到Word文档中。缺点是没法指定字体的大小,如果要修改,只能修改生成的html文件的代码。

ImageFormatter
用于将代码格式化为图片,需要PIL或者pillow作为图片处理的库,常用的参数有:

image_format/str:生成的图片格式,默认为"PNG",也可以是"JPEG"/“BMP”/“GIF”
font_name/str:指定代码的字体
font_size/int:指定代码的字号,默认为14
line_number_chars/int:指定代码行号占几个字符,防止留给行号的空间不够,默认为2
除了上面列举的两个,pygments还提供了一些别的formatter,比如RtfFormatter,SvgFormatter,TerminalFormatter,BmpImageFormatter等,可以自行到官网查看

https://blog.csdn.net/qq_47993287/article/details/109085877

posted @ 2023-06-30 16:21  michaelchengjl  阅读(125)  评论(0编辑  收藏  举报