用 jupyter nbconvert --to markdown 导出 Markdown 时需加 --no-input 避免输入编号,--no-prompt 保留代码去编号,图片路径错乱需手动图床替换或统一输出目录,公式渲染异常因未启用 MathJax 支持。

直接用 jupyter nbconvert --to markdown 就能导出,但导出后图片路径错乱、公式渲染异常、代码块带输入编号——这些不是你操作错了,而是默认行为没调对。
命令行导出时图片路径失效怎么办
默认执行 jupyter nbconvert --to markdown notebook.ipynb 会生成一个 .md 文件和一个同名的 _files 文件夹,里面存着所有图表。但 Markdown 渲染器(比如 Typora、VS Code 预览、GitHub)往往不认相对路径 ,尤其当文件被挪动或上传到远程平台时。
- 最稳做法:加
--no-input+ 手动把_files里的图传到图床,再全局替换 Markdown 中的为图床 URL - 临时省事:用
--output-dir ./export指定统一输出目录,确保.md和_files始终在一起,再用支持本地资源预览的编辑器打开 - 别踩坑:不要用
--embed-images(nbconvert 不支持该参数),那是旧版误传;真要内联图片得靠 Python API + base64 编码
导出的 Markdown 里还带着 In[1]:、Out[1]: 怎么去掉
这些编号是 Notebook 执行痕迹,纯阅读场景下冗余且干扰排版。关键不是“删掉”,而是从源头控制是否生成。
- 彻底隐藏输入代码块:加
--no-input参数,导出只含 Markdown 文本和执行结果(图表、表格、文本输出) - 只隐藏编号、保留代码:用
--no-prompt,输出代码块变成print("hello"),没In [1]: - 两者都不要:组合使用
--no-input --no-prompt,只剩干净文字和图表,适合发博客或文档
批量转换当前目录所有 .ipynb 文件
别一个个敲命令,终端一行就能扫完:
通过 jina.ai 将网页抓取为精简的 markdown,用于在需要获取 URL 并获取压缩的 markdown 内容以节省 token。触发词 l...
jupyter nbconvert --to markdown *.ipynb
但要注意几个现实约束:
- Windows cmd 不支持
*通配符,得用 PowerShell 或 Git Bash - 文件名含空格会中断,建议先重命名(如用
rename 's/ /_/g' *.ipynb) - 如果某个 notebook 里用了未安装的库绘图(比如
plotly),nbconvert 仍能转成功——它不运行代码,只读 JSON 结构,所以不用担心环境缺失
用 Python 脚本控制导出逻辑
当你需要自动清理输出、替换图片链接、或跳过某些 notebook 时,nbconvert 的 Python API 更可靠:
from nbconvert import MarkdownExporter<br>import nbformat<br><br>with open("report.ipynb") as f:<br> nb = nbformat.read(f, as_version=4)<br><br>exporter = MarkdownExporter()<br>body, resources = exporter.from_notebook_node(nb)<br><br># 这里可以操作 body 字符串:正则替换图片路径、删掉特定 div 标签等<br>with open("clean.md", "w") as f:<br> f.write(body)注意:resources 里有 resources['outputs'] 和 resources['images'],但实际导出时图片不会自动写入磁盘——你得自己处理 resources['outputs'] 中的 base64 数据或路径映射。
真正容易被忽略的是:nbconvert 默认不执行 notebook,所以哪怕你 notebook 里写了 raise Exception(),它照样转出 Markdown;但如果你依赖变量值生成文字说明(比如 “模型准确率:{acc:.2%}”),这种动态内容就完全丢失了——得先用 nbclient 运行一遍再导出,这是另一个层级的问题。

















