直接用 markdown 库就能搞定,它底层已处理好代码块、列表、标题等标准结构且默认安全;需显式启用 extensions(如 extra、codehilite)才能支持表格、围栏代码块和语法高亮,并注意编码、路径及 html 封装。

直接用 markdown 库就能搞定,不需要自己解析语法——它底层已处理好代码块、列表、标题等所有标准 Markdown 结构,且默认安全(自动转义 HTML 标签)。
安装和基础转换:别跳过 extensions 参数
多数人卡在「为什么代码块没高亮?表格不渲染?」——因为 markdown 默认只支持最简子集。必须显式启用扩展:
-
extra:支持表格、脚注、围栏代码块(```python)、缩写等 -
codehilite:启用代码块语法高亮(需额外装pygments) -
fenced_code:单独启用围栏代码块(如果不用extra)
示例命令:
pip install markdown pygments
Python 调用:
import markdown<br>html = markdown.markdown(text, extensions=['extra', 'codehilite'])
处理路径和文件读写:注意编码和换行
Windows 上用记事本保存的 .md 文件常是 gbk 编码,直接 open() 会报 UnicodeDecodeError;Linux/macOS 默认 UTF-8,但可能含 BOM。稳妥做法:
- 始终指定
encoding='utf-8-sig'(自动跳过 UTF-8 BOM) - 用
pathlib.Path处理路径,避免手动拼接/或\ - 输出 HTML 时加
html_header和html_footer,否则只是片段,浏览器打不开
片段示例:
from pathlib import Path<br>md_path = Path('readme.md')<br>html_path = md_path.with_suffix('.html')<br><br>text = md_path.read_text(encoding='utf-8-sig')<br>html = markdown.markdown(text, extensions=['extra'])<br><br>full_html = f'''<br>{html}'''<br>html_path.write_text(full_html, encoding='utf-8')
自定义渲染行为:绕开 markdown 的默认限制
比如想让所有链接自动加 target="_blank",或把  的图片加上 loading="lazy"——markdown 不提供钩子函数,得用正则后处理或换库。更稳的方式是用 markdown-it-py(可插件化)或直接上 mistune v3(原生支持 renderer 钩子):
-
markdown-it-py:插件丰富,但 API 稍重,适合长期维护 -
mistune:轻量,v3 支持自定义render_link/render_image方法,改几行就生效 - 正则替换风险高:比如
re.sub(r'<a target="_blank" html> 可能误伤 HTML 属性里的 <code>a字符串
真正难的不是转格式,而是搞清输入 Markdown 的来源和约束:是否含自定义语法?是否要兼容 Obsidian 的 YAML front matter?要不要导出为 PDF?这些决定了你该停在 markdown 库,还是切到 mistune 或 marko。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











