做 AI 的人都有一个共同的坎:你手上有一堆 PDF、Word、Excel,想让 AI 读,但 AI 只认纯文本。
复制粘贴?表格全散架,标题和小字糊成一团。用在线转换站?文件先传别人服务器,公司文档根本不敢传。
微软自己出了个工具解决这件事:MarkItDown,一条命令把任何文件转成 Markdown。19 万星,MIT 协议,本地跑,不上传。
它到底能转什么
官方 README 列的支持清单,一条不少抄下来:
| 类型 | 说明 |
|---|---|
| 正文、排版结构 | |
| Word / PowerPoint / Excel | 表格会保留成 Markdown 表格 |
| 图片 | 读 EXIF 元数据,可选 OCR |
| 音频 | 读元数据,可选语音转写 |
| HTML | 网页正文 |
| CSV / JSON / XML | 文本类格式 |
| ZIP | 自动遍历压缩包里的每个文件 |
| EPUB | 电子书 |
| YouTube 链接 | 直接抓字幕转文字 |
ZIP 那条最实用:扔一个压缩包进去,它会把里面每份文件都转出来,一次搞定一整批资料。
为什么一定要 Markdown
不是随便挑的格式。Markdown 有三个特性正好卡在 AI 的需求上:
- 结构不丢——标题、列表、表格、链接都能保留,PDF 里藏着的层级关系不会糊成一片
- AI 天生认识——主流大模型训练时吃了大量 Markdown,拿到就直接理解
- 省 token——同样的内容,Markdown 比 HTML 少一大截标签,长文档能省不少钱
安装:一个坑先说
它要求 Python 3.10 到 3.14。我用 macOS 自带的 3.9 试过,装不上,pip 只会给你一个 0.0.1a1 的占位包,报错信息还很模糊。换 3.12 一次就过了。
先确认你的 Python 版本:
python3 --version
如果是 3.10 以上,直接装全量:
pip install 'markitdown[all]'
不想装一大堆依赖,只装你要用的格式:
pip install 'markitdown[pdf, docx, pptx]'
可选的依赖包清单(照抄官方):
[all] 全部
[pdf] PDF
[docx] Word
[pptx] PowerPoint
[xlsx] Excel
[xls] 旧版 Excel
[outlook] Outlook 邮件
[audio-transcription] wav / mp3 语音转写
[youtube-transcription] YouTube 字幕
[az-doc-intel] Azure 文档智能
怎么用:一条命令
markitdown 报告.pdf > 报告.md
或者指定输出文件:
markitdown 报告.pdf -o 报告.md
也支持管道,适合批处理:
cat 报告.pdf | markitdown
我自己实测的效果
造了个带表格的 Word 和 Excel 试了一下,输出是这样:
# 测试标题
这是正文段落。
| | |
| --- | --- |
| 键 | 值 |
| A | 100 |
标题层级、正文、表格全部保留下来,而且表格是标准的 Markdown 表格语法——直接贴给 AI 就能看懂,不用再解释。
在 Python 里调用
做批量处理时走 API 更方便:
from markitdown import MarkItDown
md = MarkItDown(enable_plugins=False)
result = md.convert("test.xlsx")
print(result.markdown)
批量转一个文件夹:
from markitdown import MarkItDown
from pathlib import Path
md = MarkItDown()
for f in Path("资料").iterdir():
if f.is_file():
try:
out = f.with_suffix(".md")
out.write_text(md.convert(str(f)).markdown, encoding="utf-8")
print("OK", f.name)
except Exception as e:
print("跳过", f.name, e)
扫描版 PDF 怎么办
这是它唯一明显的短板:纯图片的扫描件,它读不出字。因为默认只提取文本层,图片里的内容需要 OCR。
解决办法是装官方插件 markitdown-ocr,它借用 AI 的视觉能力识图,不额外装机器学习库:
pip install markitdown-ocr
pip install openai
然后带插件跑:
markitdown --use-plugins 扫描件.pdf
想先看装了哪些插件:
markitdown --list-plugins
一个必须知道的安全提示
官方 README 里自己写了警告:这个工具以当前进程的权限读写文件。
意思是——你对它说「转换这个文件」,它就能读你进程能读的任何东西。处理来路不明的文件时要小心,别在服务器上直接跑别人上传的压缩包。
官方给的稳妥做法是:在不可信环境里,调用最窄的那个函数(比如 convert_stream() 或 convert_local()),先清洗输入。
适合谁用
- 让 AI 读资料的人——一堆 PDF 丢进去,转成文本喂给大模型
- 做知识库/私有 RAG 的——文档预处理第一环就是把格式统一成文本
- 整理文档的——Word/Excel 转 Markdown 后能进 Git 版本管理
- 处理敏感文件的人——本地跑,一个字节都不出门
如果你只是偶尔转一两个 PDF,用现成的在线工具更快;但一旦上量、或者文件不能外传,本地命令行就是唯一靠谱的选项。
常见问题
Q:装的时候报 0.0.1a1 是什么?
A:Python 版本太老(低于 3.10),pip 退回到了占位包。换 Python 3.10+ 重装。
Q:中文文件名有问题吗?
A:没问题,只要输出重定向时用 UTF-8 编码。
Q:要联网吗?
A:纯本地转换不需要。只有处理 YouTube 链接、或者开了 OCR 插件时才要。
Q:导出效果好到能直接给人看吗?
A:官方明说了,它的目标是给文本分析工具用,不是给人做高保真排版还原。要好看还是得人工调。
Q:Windows 能用吗?
A:能,Python 跨平台,命令完全一样。
一句话总结
19 万星不是白来的:它解决的是 AI 时代最基础也最烦的一步——把人类格式变成机器能读的文本。一条命令,本地跑,免费。