Python Pygments库:代码高亮的利器

5e6f4fb4bca9b349f5ac91d35315456d.png

更多Python学习内容:ipengtao.com

Pygments是一个用于Python的强大语法高亮库。它支持多种编程语言和标记格式,能够将源代码转换为高亮格式的文本,使代码在阅读和展示时更加清晰易懂。Pygments广泛应用于博客、文档、代码编辑器和IDE中,提供了丰富的主题和输出格式。本文将详细介绍Pygments库的安装、主要功能、基本操作、高级功能及其实践应用,并提供丰富的示例代码。

安装

Pygments可以通过pip进行安装。确保Python环境已激活,然后在终端或命令提示符中运行以下命令:

pip install pygments

主要功能

  1. 多语言支持:支持多种编程语言和标记格式的语法高亮。

  2. 丰富的主题:提供多种高亮主题,满足不同风格需求。

  3. 多种输出格式:支持HTML、LaTeX、RTF、SVG等多种输出格式。

  4. 命令行工具:提供便捷的命令行工具进行代码高亮。

  5. 灵活的API:提供简洁且强大的API,方便集成到各种应用中。

基本操作

基本用法

以下示例展示了如何使用Pygments对Python代码进行高亮,并生成HTML输出:

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

code = '''
def hello_world():
    print("Hello, World!")
'''

# 使用PythonLexer进行语法分析,HtmlFormatter进行HTML格式化
html_code = highlight(code, PythonLexer(), HtmlFormatter())

# 输出HTML
print(html_code)

生成高亮的HTML文件

以下示例展示了如何将高亮的代码输出到HTML文件:

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

code = '''
def hello_world():
    print("Hello, World!")
'''

# 使用PythonLexer进行语法分析,HtmlFormatter进行HTML格式化
html_code = highlight(code, PythonLexer(), HtmlFormatter(full=True))

# 输出到HTML文件
with open('highlight.html', 'w') as file:
    file.write(html_code)

使用不同的主题

Pygments提供了多种高亮主题,以下示例展示了如何使用不同的主题:

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

code = '''
def hello_world():
    print("Hello, World!")
'''

# 使用不同的主题进行高亮
styles = ['colorful', 'monokai', 'vim']
for style in styles:
    html_code = highlight(code, PythonLexer(), HtmlFormatter(style=style, full=True))
    with open(f'highlight_{style}.html', 'w') as file:
        file.write(html_code)

高级功能

生成CSS文件

Pygments允许生成对应主题的CSS文件,以便在Web项目中使用。

以下示例展示了如何生成CSS文件:

from pygments.formatters import HtmlFormatter

# 生成CSS文件
css_code = HtmlFormatter(style='monokai').get_style_defs('.highlight')
with open('pygments.css', 'w') as file:
    file.write(css_code)

命令行工具

Pygments提供了一个便捷的命令行工具pygmentize,用于快速进行代码高亮。

以下示例展示了如何使用pygmentize工具:

# 高亮Python代码并输出为HTML
pygmentize -f html -o highlight.html example.py

# 列出所有支持的语言
pygmentize -L lexers

# 列出所有支持的主题
pygmentize -L styles

高亮多种语言

Pygments支持多种编程语言和标记格式。

以下示例展示了如何高亮多种语言的代码:

from pygments import highlight
from pygments.lexers import PythonLexer, HtmlLexer, JavascriptLexer
from pygments.formatters import HtmlFormatter

# 示例代码
python_code = 'print("Hello, World!")'
html_code = '<h1>Hello, World!</h1>'
js_code = 'console.log("Hello, World!");'

# 高亮不同语言的代码
highlighted_python = highlight(python_code, PythonLexer(), HtmlFormatter(full=True))
highlighted_html = highlight(html_code, HtmlLexer(), HtmlFormatter(full=True))
highlighted_js = highlight(js_code, JavascriptLexer(), HtmlFormatter(full=True))

# 输出到文件
with open('highlight_python.html', 'w') as file:
    file.write(highlighted_python)

with open('highlight_html.html', 'w') as file:
    file.write(highlighted_html)

with open('highlight_js.html', 'w') as file:
    file.write(highlighted_js)

自定义语言解析器

Pygments允许用户自定义语言解析器,以支持新的编程语言或标记格式。

以下示例展示了如何创建自定义语言解析器:

from pygments.lexer import RegexLexer
from pygments.token import Text, Keyword, Name

class SimpleLangLexer(RegexLexer):
    name = 'SimpleLang'
    tokens = {
        'root': [
            (r'\s+', Text),
            (r'\b(keyword1|keyword2)\b', Keyword),
            (r'[a-zA-Z_]\w*', Name),
        ]
    }

# 使用自定义语言解析器
from pygments import highlight
from pygments.formatters import HtmlFormatter

code = '''
keyword1 var = keyword2
'''

html_code = highlight(code, SimpleLangLexer(), HtmlFormatter(full=True))
with open('highlight_simplelang.html', 'w') as file:
    file.write(html_code)

实践应用

集成到Web项目中

以下示例展示了如何将Pygments集成到Django项目中,实现代码高亮功能:

  1. 安装Pygments

pip install pygments
  1. 创建Django视图

# views.py
from django.shortcuts import render
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter

def code_view(request):
    code = '''
    def hello_world():
        print("Hello, World!")
    '''
    highlighted_code = highlight(code, PythonLexer(), HtmlFormatter(full=True))
    return render(request, 'code_view.html', {'highlighted_code': highlighted_code})
  1. 创建模板

<!-- templates/code_view.html -->
<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" type="text/css" href="{% static 'pygments.css' %}">
</head>
<body>
    <div class="highlight">
        {{ highlighted_code|safe }}
    </div>
</body>
</html>
  1. 生成CSS文件

# 在Django项目的某个位置运行以下代码生成CSS文件
from pygments.formatters import HtmlFormatter

css_code = HtmlFormatter(style='default').get_style_defs('.highlight')
with open('static/pygments.css', 'w') as file:
    file.write(css_code)

生成PDF文档

以下示例展示了如何使用Pygments将高亮代码嵌入到PDF文档中:

from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import LatexFormatter
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

code = '''
def hello_world():
    print("Hello, World!")
'''

# 高亮代码并转换为LaTeX格式
latex_code = highlight(code, PythonLexer(), LatexFormatter())

# 创建PDF文档
c = canvas.Canvas("highlight.pdf", pagesize=letter)
textobject = c.beginText(40, 750)
for line in latex_code.splitlines():
    textobject.textLine(line)
c.drawText(textobject)
c.showPage()
c.save()

高亮Jupyter Notebook单元格

以下示例展示了如何在Jupyter Notebook中使用Pygments进行代码高亮:

from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter
from IPython.core.display import HTML

code = '''
def hello_world():
    print("Hello, World!")
'''

# 高亮代码并生成HTML
html_code = highlight(code, PythonLexer(), HtmlFormatter(full=True))
HTML(html_code)

将代码高亮集成到Flask应用中

以下示例展示了如何将Pygments集成到Flask应用中,实现代码高亮功能:

  1. 安装Pygments

pip install pygments Flask
  1. 创建Flask视图

# app.py
from flask import Flask, render_template_string
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter

app = Flask(__name__)

@app.route('/')
def code_view():
    code = '''
    def hello_world():
        print("Hello, World!")
    '''
    highlighted_code = highlight(code, PythonLexer(), HtmlFormatter(full=True))
    return render_template_string('''
    <!DOCTYPE html>
    <html>
    <head>
        <link rel="stylesheet" type="text/css" href="/static/pygments.css">
    </head>
    <body>
        <div class="highlight">
            {{ highlighted_code|safe }}
        </div>
    </body>
    </html>
    ''', highlighted_code=highlighted_code)

if __name__ == '__main__':
    app.run(debug=True)
  1. 生成CSS文件

# 在Flask项目的某个位置运行以下代码生成CSS文件
from pygments.formatters import HtmlFormatter

css_code = HtmlFormatter(style='default').get_style_defs('.highlight')
with open('static/pygments.css', 'w') as file:
    file.write(css_code)

总结

Pygments库为Python开发者提供了一个功能强大且灵活的语法高亮工具。通过其多语言支持、丰富的主题和多种输出格式,Pygments能够轻松满足各种场景下的代码高亮需求。无论是在Web项目、文档生成、Markdown处理还是PDF文档创建中,Pygments都能提供强大的支持和便利。本文详细介绍了Pygments库的安装、主要功能、基本操作、高级功能及其实践应用,并提供了丰富的示例代码。希望在实际项目中能够充分利用Pygments库,提高代码展示的清晰度和美观性。

如果你觉得文章还不错,请大家 点赞、分享、留言 ,因为这将是我持续输出更多优质文章的最强动力!

更多Python学习内容:ipengtao.com


如果想要系统学习Python、Python问题咨询,或者考虑做一些工作以外的副业,都可以扫描二维码添加微信,围观朋友圈一起交流学习。

e58fc9fba7160c0f3be1704ecdb3d5ea.gif

我们还为大家准备了Python资料和副业项目合集,感兴趣的小伙伴快来找我领取一起交流学习哦!

ba4901c811b394a6d2ce806ed3aceaab.jpeg

往期推荐

Python 中的 iter() 函数:迭代器的生成工具

Python 中的 isinstance() 函数:类型检查的利器

Python 中的 sorted() 函数:排序的利器

Python 中的 hash() 函数:哈希值的奥秘

Python 中的 slice() 函数:切片的利器

Python 的 tuple() 函数:创建不可变序列

点击下方“阅读原文”查看更多

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值