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() 函数:创建不可变序列

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/687180.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

视频会员干货收藏

这个文章绝对价值几百块&#xff0c;可以省去你不少视频会员的钱。但还是建议大家支持正版。。。 只推荐货真价实的好东西&#xff0c;谁用谁知道。无论电影还是电视剧更新速度还是很快的&#xff0c;而且最重要的一点&#xff0c;你连注册都不用注册&#xff0c;直接看&#x…

宝兰德应用服务器软件通过保险业信息技术应用创新攻关实验室产品适配测试认证

近期&#xff0c;宝兰德中间件核心产品「应用服务器软件 V9.5.5」&#xff08;以下简称&#xff1a;应用服务器软件&#xff09;顺利通过了保险业信息技术应用创新攻关实验室产品适配测试。标志着宝兰德应用服务器软件符合信息技术产品适配要求&#xff0c;能够全面支持金融保险…

【网络基础1】

文章目录 学习目标一、网络基础11.网络的重要性2.osi7层模式3.协议和osi7层模型的关系4.数据的封装和解封装5.tcp的三次握手6.Ddos攻击讲解7.Tcp的四次挥手 二、网络基础21.文字编码2.IP地址的划分3.子网掩码4.同网段ip才能直接通信5.DNS解析6.DNS解析命令7.短域名为什么值钱8.…

项目工具|git相关

本博客暂时只作为个人资料&#xff0c;后续会进行完善&#xff0c;主要内容来自&#xff1a; 【【Git第一讲】&#xff1a;git分区与两个盒子的故事】 理解暂存区和未暂存区 git为什么要多一个暂存区&#xff1f;难道不能我把代码写完后就是未暂存区&#xff0c;然后直接提交…

mysql设置允许外部ip访问,局域网IP访问

&#xff08;支持MYSQL8版本&#xff09; 1. 登录进入mysql&#xff1b;mysql -uroot -p输入密码进入 2. 输入以下语句&#xff0c;进入mysql库&#xff0c;查看user表中root用户的访问 use mysql; select host,user from user; 3. 更新user表中root用户域属性&#xff0c…

STM32——ADC篇(ADC的使用)

一、ADC的介绍 1.1什么是ADC ADC&#xff08;Analogto-Digital Converter&#xff09;模拟数字转换器&#xff0c;是将模拟信号转换成数字信号的一种外设。比如某一个电阻两端的是一个模拟信号&#xff0c;单片机无法直接采集&#xff0c;此时需要ADC先将短租两端的电…

深度学习(三)

5.Functional API 搭建神经网络模型 5.1利用Functional API编写宽深神经网络模型进行手写数字识别 import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom…

SVNCloud 与 Navicat和IDEA的连接

文章目录 SVNCloud 配置Navicat访问云端数据库与IDEA Java jdbc 的连接 SVNCloud 配置 访问网址&#xff1a;SVN注册账号&#xff0c;进入mysql区域&#xff1a; 数据库管理->创建数据库&#xff0c;输入数据库名称和密码&#xff0c;注意&#xff0c;这里的数据库名称实际…

vue 如何制作一个跟随窗口大小变化而变化的组件

vue 如何制作一个跟随窗口大小变化而变化的组件 像下图中展示的那些统计数件就是跟随窗口变化而变化的&#xff0c;而且是几乎等比缩放的。 实现原理 只简略说一下原理。 pinia 中记录一个窗口变化的高度值给要变化的组件添加一个高度值组件内部所有关于长度距离的值都通过这…

笔记 | 软件工程04:软件项目管理

1 软件项目及其特点 1.1 什么是项目 1.2 项目特点 1.3 影响项目成功的因素 1.4 什么是软件项目 针对软件这一特定产品和服务的项目努力开展“软件开发活动",&#xff08;理解&#xff1a;软件项目是一种活动&#xff09; 1.5 软件项目的特点 1.6 军用软件项目的特点 2 …

水库安全监测系统:智慧水文动态监测系统

TH-SW2水库安全监测系统&#xff0c;作为一款智慧水文动态监测系统&#xff0c;其在现代水利管理中扮演着至关重要的角色。该系统通过集成先进的数据采集、传输、处理和分析技术&#xff0c;为水库的安全运行提供了强有力的技术支撑。 水库安全监测系统是一种用于实时监测和记…

matplotlib绘制三维曲面图时遇到的问题及解决方法

在使用 Matplotlib 绘制三维曲面图时&#xff0c;可能会遇到一些常见的问题。今天我将全程详细讲解下遇到问题并且找到应对方法的全部过程&#xff0c;希望能帮助大家。 1、问题背景 在使用 matplotlib 绘制三维曲面图时&#xff0c;遇到了一个问题。代码如下&#xff1a; im…

Faiss框架使用与FaissRetriever实现

Faiss是一个由Facebook AI Research开发的库&#xff0c;用于高效相似性搜索和稠密向量聚类。它为机器学习和深度学习中的向量检索问题提供了一种高效的解决方案&#xff0c;特别是在处理大规模数据集时。Faiss支持多种索引类型&#xff0c;包括基于量化的索引、基于聚类的索引…

Ubuntu系统的k8s常见的错误和解决的问题

K8s配置的时候出现的常见问题 Q1: master节点kubectl get nodes 出现的错误 或者 解决方法&#xff1a; cat <<EOF >> /root/.bashrc export KUBECONFIG/etc/kubernetes/admin.conf EOFsource /root/.bashrc重新执行 kubectl get nodes 记得需要查看一下自己的…

倒计时 3 天!立即预约苹果 WWDC24 直播;RLAIF-V 大规模多模态偏好数据集上线,有效减少不同 MLLMs 幻觉现象

6 月 3 日-6 月 7 日&#xff0c;hyper.ai 官网更新速览&#xff1a; 优质公共数据集&#xff1a;10 个 优质教程精选&#xff1a;2 个 社区文章精选&#xff1a;3 篇 热门百科词条&#xff1a;5 条 6-7 月截稿顶会&#xff1a;5 个 访问官网&#xff1a;hyper.ai 公共数…

37. 【Java教程】序列化与反序列化

上一小节我们学习了 Java 的输入输出流&#xff0c;有了这些前置知识点&#xff0c;我们就可以学习 Java 的序列化了。本小节将介绍什么是序列化、什么是反序列化、序列化有什么作用&#xff0c;如何实现序列化与反序列化&#xff0c;Serializable 接口介绍&#xff0c;常用序列…

【JavaEE精炼宝库】多线程(4)深度理解死锁、内存可见性、volatile关键字、wait、notify

目录 一、死锁 1.1 出现死锁的常见场景&#xff1a; 1.2 产生死锁的后果&#xff1a; 1.3 如何避免死锁&#xff1a; 二、内存可见性 2.1 由内存可见性产生的经典案例&#xff1a; 2.2 volatile 关键字&#xff1a; 2.2.1 volatile 用法&#xff1a; 2.2.2 volatile 不…

C++中的stack和queue

C中的stack和queue 一丶stack1. stack的介绍2. stack的使用3. stack的模拟实现 二丶queue1. queue的介绍2. queue的使用3. queue的模拟实现 一丶stack 1. stack的介绍 stack的文档介绍 关于stack&#xff1a; 1. stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的…

ROS socketcan_bridge使用说明

ROS socketcan_bridge使用说明&#xff08;以ubuntu20.04为例&#xff09; socketcan_bridge是什么 ROS针对socketcan提供了三个层次的驱动库&#xff0c;分别是ros_canopen&#xff0c;socketcan_bridge和socketcan_interface。 socketcan_interface&#xff1a; 功能&#x…

20240607在Toybrick的TB-RK3588开发板的Android12下适配IMX415摄像头和ov50c40

20240607在Toybrick的TB-RK3588开发板的Android12下适配IMX415摄像头和ov50c40 2024/6/7 11:42 【4K/8K摄像头发热量巨大&#xff0c;请做好散热措施&#xff0c;最好使用散热片鼓风机模式&#xff01;】 结论&#xff1a;欢迎您入坑。 Toybrick的TB-RK3588开发板的技术支持不…