news 2026/9/4 8:24:11

Python进阶教程:24_Markdown 转 HTML 零基础超详细教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python进阶教程:24_Markdown 转 HTML 零基础超详细教程

在 Python 中把 Markdown 文本转换成 HTML 网页,最经典、最常用的工具是Python-Markdown第三方库。它完全兼容标准 Markdown 语法,还可以通过「扩展插件」解锁表格、代码高亮、自动目录、脚注等进阶功能,非常适合生成技术文档、博客页面、笔记导出等场景,新手几分钟就能上手。

本文从环境搭建、基础转换、进阶扩展到完整实战,全程配可运行代码 + 逐行解释,零基础也能做出美观的 HTML 文档。


一、环境准备

1. 安装库

markdown是第三方库,需要通过 pip 安装,打开终端执行:

pip install markdown

2. 验证安装

执行下面的代码,不报错就说明安装成功:

import markdown print(markdown.__version__)

补充说明

  • 它的核心作用:输入 Markdown 格式的文本 / 文件,输出对应的 HTML 标签字符串
  • 原生只支持基础 Markdown 语法,进阶功能需要开启对应的「扩展」(可以理解为官方插件)
  • 生成的默认 HTML 只有标签没有样式,需要自己加 CSS 才能变成美观的页面

二、基础入门:两种核心转换方式

方式 1:字符串转换(内存中直接转)

适合处理短文本、动态生成的 Markdown 内容,直接在内存里转换,不需要读写文件。

完整示例
# 1. 导入库 import markdown # 2. 准备一段Markdown格式的文本 md_text = """ # Python 入门教程 这是一篇用Markdown写的教程,**加粗强调重点**,*斜体标注说明*。 ## 一、基础语法 学习Python需要掌握以下内容: - 变量与数据类型 - 条件判断与循环 - 函数与模块 ## 二、学习建议 多写代码多练习,参考官方文档: [Python官方网站](https://www.python.org/) > 提示:坚持每天练习,进步会很快。 """ # 3. 核心方法:把Markdown转换成HTML # markdown.markdown(markdown文本) 返回HTML字符串 html_text = markdown.markdown(md_text) # 4. 打印转换结果 print("转换后的HTML内容:") print(html_text)
运行结果(简化)
<h1>Python 入门教程</h1> <p>这是一篇用Markdown写的教程,<strong>加粗强调重点</strong>,<em>斜体标注说明</em>。</p> <h2>一、基础语法</h2> <p>学习Python需要掌握以下内容:</p> <ul> <li>变量与数据类型</li> <li>条件判断与循环</li> <li>函数与模块</li> </ul> ...
代码解释
  • markdown.markdown()是最核心的转换函数,输入 Markdown 字符串,输出 HTML 字符串
  • 自动对应关系:#<h1>**<strong>-<ul><li>><blockquote>
  • 原生支持所有基础 Markdown 语法:标题、段落、加粗、斜体、列表、引用、链接、图片、分割线

方式 2:本地文件转换(.md 转 .html)

这是日常最常用的场景:读取本地已经写好的.md文件,转换后保存成.html网页文件。

完整示例
import markdown # ========== 第一步:读取本地Markdown文件 ========== # 必须指定 encoding="utf-8",否则中文会乱码 with open("我的笔记.md", "r", encoding="utf-8") as f: # 读取文件全部内容,得到Markdown字符串 md_content = f.read() # ========== 第二步:转换为HTML ========== # 这里先演示基础转换,后面会讲解扩展参数 html_content = markdown.markdown(md_content) # ========== 第三步:保存为HTML文件 ========== with open("我的笔记.html", "w", encoding="utf-8") as f: f.write(html_content) print("转换完成!已生成 我的笔记.html")
关键说明
  1. 中文乱码问题:读写文件必须加encoding="utf-8",这是新手 100% 会踩的坑
  2. 转换后得到的只是 HTML 正文片段,没有<head><body>等完整页面结构,浏览器也能打开,但样式很简陋
  3. 后面的实战部分会教你加上样式,生成完整美观的网页

三、核心进阶:扩展插件(Extensions)

原生markdown只支持最基础的 Markdown 语法,表格、任务列表、代码高亮、自动目录这些常用功能,都需要开启对应的扩展插件才能使用。这是新手最容易踩坑的地方 —— 写了表格语法却不生效,大概率是没开扩展。

使用方法

markdown.markdown()方法中加extensions参数,传入扩展名称的列表即可:

html = markdown.markdown(md_text, extensions=["扩展1", "扩展2"])

最常用的 5 个扩展


1.extra:全能扩展合集(新手必开)

这是最常用的扩展,一次性打包了表格、脚注、定义列表、属性列表等高频功能,日常使用开这一个就够了。

示例:Markdown 表格转换
import markdown md_table = """ ### 学生成绩表 | 姓名 | 年龄 | 分数 | |------|------|------| | 小明 | 18 | 95 | | 小红 | 17 | 88 | | 小刚 | 19 | 92 | """ # ❌ 不开扩展:表格会被当成普通文本,格式错乱 # html1 = markdown.markdown(md_table) # ✅ 开启extra扩展:正确转换成标准<table>表格标签 html2 = markdown.markdown(md_table, extensions=["extra"]) print(html2)

开启后会自动生成带<table><tr><th><td>的标准表格 HTML 代码。


2.toc:自动生成目录

自动根据文章的标题层级生成带锚点的目录,只需要在 Markdown 里写[TOC]标记,转换时会自动替换成目录。

示例
import markdown md_text = """ [TOC] # 第一章:Python基础 ## 1.1 变量 变量的定义与使用 ## 1.2 数据类型 常见数据类型介绍 # 第二章:函数 ## 2.1 函数定义 def关键字的用法 """ # 开启toc扩展 html = markdown.markdown(md_text, extensions=["toc"]) print(html)

效果:[TOC]的位置会被替换成嵌套的目录列表,点击目录标题可以跳转到对应章节,非常适合长文档。


3.codehilite:代码块语法高亮

给代码块加上语法高亮颜色,让代码更易读。需要先安装依赖库pygments

pip install pygments
示例
import markdown md_code = """ 下面是一段Python代码: ```python def add(a, b): # 计算两数之和 return a + b print(add(1, 2))

"""

开启 codehilite 扩展,linenums=True 表示显示行号

html = markdown.markdown( md_code, extensions=["codehilite"], extension_configs={ "codehilite": {"linenums": True} } )

> 注意:这个扩展只会给代码标签加上 CSS 类名,不会自带颜色,需要额外引入高亮样式文件,后面完整实战会教你加样式。 --- #### 4. `nl2br`:换行自动转换行标签 标准 Markdown 里,单回车不会换行,必须空一行才会分段。开启 `nl2br` 后,每一个回车都会自动转换成 `<br>` 换行标签,适合习惯写短行、随手回车的场景。 ```python html = markdown.markdown(md_text, extensions=["nl2br"])

5.sane_lists:智能列表

优化列表的解析逻辑,避免混合有序 / 无序列表时出现格式错乱,让解析结果更符合直觉。


四、完整实战:生成带样式的美观 HTML

默认转换出来的 HTML 只有标签,没有任何样式,打开非常简陋。我们可以给它加上基础 CSS 样式,生成一个排版美观、带代码高亮、带目录的完整网页,新手可以直接套用这个模板。

完整代码

import markdown # ========== 1. 读取Markdown文件 ========== with open("我的笔记.md", "r", encoding="utf-8") as f: md_text = f.read() # ========== 2. 配置扩展 ========== # 开启:表格合集 + 自动目录 + 代码高亮 my_extensions = ["extra", "toc", "codehilite"] # 扩展配置:代码块显示行号 ext_config = { "codehilite": {"linenums": True, "css_class": "codehilite"} } # ========== 3. 转换HTML正文 ========== body_html = markdown.markdown( md_text, extensions=my_extensions, extension_configs=ext_config ) # ========== 4. 拼接完整HTML页面(内嵌CSS样式) ========== full_html = f""" <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>我的Markdown文档</title> <style> /* 全局基础样式 */ body {{ max-width: 900px; margin: 30px auto; padding: 0 20px; font-family: "Microsoft YaHei", "微软雅黑", sans-serif; line-height: 1.7; color: #333; background-color: #fafafa; }} /* 标题样式 */ h1, h2, h3, h4 {{ color: #2c3e50; border-bottom: 1px solid #e0e0e0; padding-bottom: 6px; margin-top: 30px; }} h1 {{ text-align: center; border-bottom: 2px solid #3498db; padding-bottom: 10px; }} /* 段落与引用 */ p {{ margin: 15px 0; }} blockquote {{ border-left: 4px solid #3498db; padding: 10px 15px; margin: 15px 0; background: #f0f7ff; color: #555; }} /* 列表样式 */ ul, ol {{ padding-left: 25px; }} li {{ margin: 5px 0; }} /* 表格样式 */ table {{ border-collapse: collapse; width: 100%; margin: 20px 0; }} th, td {{ border: 1px solid #d0d0d0; padding: 8px 12px; text-align: left; }} th {{ background-color: #3498db; color: white; }} tr:nth-child(even) {{ background-color: #f5f5f5; }} /* 代码块样式 */ .codehilite {{ background: #282c34; color: #abb2bf; padding: 15px; border-radius: 6px; overflow-x: auto; font-size: 14px; margin: 15px 0; }} .codehilite .linenodiv {{ padding-right: 12px; color: #666; border-right: 1px solid #444; margin-right: 10px; }} /* 目录样式 */ .toc {{ background: #fff; border: 1px solid #e0e0e0; border-radius: 6px; padding: 15px 20px; margin: 20px 0; }} .toc ul {{ margin: 5px 0; }} .toc a {{ color: #3498db; text-decoration: none; }} .toc a:hover {{ text-decoration: underline; }} /* 图片自适应 */ img {{ max-width: 100%; border-radius: 4px; }} </style> </head> <body> {body_html} </body> </html> """ # ========== 5. 保存最终HTML文件 ========== with open("我的笔记_美化版.html", "w", encoding="utf-8") as f: f.write(full_html) print("转换完成!已生成美化版HTML文件")

代码说明

  1. f-string把转换好的 HTML 正文嵌入到完整的网页模板中
  2. 内嵌了一套通用的 Markdown 样式,覆盖标题、表格、代码、目录、引用等所有常用元素
  3. 生成的文件双击就能用浏览器打开,排版美观,支持目录跳转、代码高亮
  4. 新手可以直接套用,只需要修改输入的 md 文件名和标题即可

五、其他可选方案简介

除了Python-Markdown,还有两个常用的库,适合特定场景:

  1. mistune
    • 特点:纯 Python 实现,解析速度极快,轻量无依赖
    • 适用场景:对性能要求高、只需要基础转换的场景
    • 安装:pip install mistune
  2. markdown-it-py
    • 特点:严格遵循 CommonMark 规范,功能丰富,插件生态完善
    • 适用场景:需要更严谨的语法解析、现代文档工具(比如 MyST 文档)
    • 安装:pip install markdown-it-py

新手建议:先把Python-Markdown用熟,满足绝大多数场景需求,后续有特殊需求再换其他库。


六、新手高频踩坑总结

  1. 表格不生效99% 是没开启extra扩展,原生不支持表格语法。
  2. 中文乱码读写文件必须加encoding="utf-8",Windows 默认 GBK 编码会导致乱码。
  3. 代码高亮没颜色
    • 没装pygments依赖库
    • 只开了扩展没加对应的 CSS 样式,扩展只负责加类名,颜色需要 CSS 控制
  4. 目录不显示
    • 没开toc扩展
    • Markdown 正文里没写[TOC]标记
  5. 扩展名拼写错误注意是codehilite不是codehighlight,少一个字母都不会生效。

七、核心总结

  1. 基础用法markdown.markdown(md文本)一键转换,字符串和文件两种场景都支持
  2. 进阶必备:开启extra扩展解锁表格、脚注等功能,是日常使用的标配
  3. 实用扩展toc自动生成目录、codehilite代码高亮,长文档必备
  4. 最终效果:内嵌 CSS 样式生成完整网页,打开直接可用,新手可以直接套用模板
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 8:22:42

ECharts仪表盘全链路实践:从核心原理到工程化封装

简介&#xff1a;本资源是一套基于ECharts 5.5.0实现的高复用性大屏仪表盘可视化方案&#xff0c;面向前端开发者、数据可视化工程师及BI看板搭建人员&#xff0c;聚焦统计分析场景下的KPI动态呈现与多维指标集成需求。压缩包共3个文件&#xff08;2个JS脚本负责图表初始化与数…

作者头像 李华
网站建设 2026/9/4 8:20:52

Python电商价格监控系统开发实战:从数据采集到自动化分析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/4 8:20:45

数字字符串计数问题:动态规划与子序列匹配实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/4 8:20:37

基于Flask与ECharts的豆瓣电影数据采集与可视化实战

简介&#xff1a;本资源是一套基于Flask框架实现的豆瓣电影数据爬取与可视化完整项目源码&#xff0c;面向Python初学者及Web开发入门者&#xff0c;解决电影数据采集、后端服务搭建与前端动态展示的一体化实践需求。压缩包共972个文件&#xff0c;总计28.08MB&#xff0c;涵盖…

作者头像 李华
网站建设 2026/9/4 8:19:47

API管理系统二次开发实战:从架构设计到计费模块深度定制

简介&#xff1a;这是一套面向开发者与API平台运维人员的全新二开版API管理系统源码&#xff0c;聚焦安全加固、体验优化与功能扩展&#xff0c;解决原版鉴权漏洞、响应式缺失、分类管理薄弱等实际痛点&#xff0c;适用于私有API平台搭建、教学演示及二次开发学习。资源包共446…

作者头像 李华