直接用markdown库转换需指定encoding="utf-8-sig"读取文件以去除BOM,并显式启用tables、toc等扩展,否则表格、目录等功能不生效;安装必须用pip install markdown(小写),非Markdown。

直接用 markdown 库就能把 Markdown 文件转成 HTML,但默认不支持表格、脚注、代码高亮等常见扩展——得手动开开关,否则渲染出来会丢内容或报错。
如何正确加载并解析 Markdown 文件
别用 open().read() 后直接丢给 markdown.markdown() 就完事。文件编码、换行符、BOM 头都可能让解析出错,尤其 Windows 下带 BOM 的 UTF-8 文件会多出乱码字符。
- 始终指定
encoding="utf-8-sig"(自动剥离 BOM) - 用
with open(path, encoding="utf-8-sig") as f:安全读取 - 避免用
str.replace("\r\n", "\n")手动处理换行——open()在文本模式下已自动标准化为\n
示例:
import markdown
with open("README.md", encoding="utf-8-sig") as f:
md_text = f.read()
html = markdown.markdown(md_text)
为什么表格/目录/删除线没渲染出来
因为 markdown 库默认只启用基础语法(标题、列表、段落),所有扩展功能都得显式启用。比如表格依赖 tables 扩展,目录需要 toc,删除线靠 strikeout。
- 启用常用扩展:
extensions=["tables", "fenced_code", "codehilite", "toc", "md_in_html"] -
codehilite需配合 Pygments(pip install pygments),否则代码块只是<code></code>,没样式
-
toc生成的目录是纯 HTML,不含 JS 交互;若需滚动锚点联动,得自己加 CSS/JS
完整调用示例:
html = markdown.markdown(
md_text,
extensions=[
"tables",
"fenced_code",
"codehilite",
"toc",
"md_in_html"
],
extension_configs={
"codehilite": {"guess_lang": False, "css_class": "highlight"}
}
)
遇到“ModuleNotFoundError: No module named 'markdown'"怎么办
不是标准库,必须单独装。但注意:PyPI 上有两个主力包——markdown(原生 Python 实现,维护活跃)和 Markdown(旧版,已归档)。装错会导致导入失败或功能缺失。
- 执行
pip install markdown(小写,无下划线) - 验证安装:
python -c "import markdown; print(markdown.__version__)",输出应为 3.6+ 版本 - 如果之前装过
Markdown(大写),先pip uninstall Markdown再重装
扩展配置项名和实际行为常有出入,比如 toc 的 permalink 参数要设成 True 才生成锚点图标,但文档里藏得深;codehilite 的 pygments_style 若填错值(如 "github-dark" 但未安装对应 style),会静默退回到默认样式——这类细节不跑一遍根本发现不了。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











