MarkItDown:微软开源的万能文档转 Markdown 工具

MarkItDown 是微软开源的 Python 工具,用于将 PDF、Word、PPT、Excel、图片、音频、HTML 等多种文件格式转换为 Markdown 文本,非常适合为 LLM / RAG 知识库预处理文档。 Windows 快速上手(三步完成) 以下流程在 D:\V 目录下操作,可替换为你自己的项目目录。 第一步:新建 venv cd D:\V python -m venv .venv 第二步:激活并安装 .\.venv\Scripts\Activate.ps1 python -m pip install -U pip python -m pip install "markitdown[all]" 激活成功后提示符前会出现 (.venv)。 第三步:验证安装 python -m markitdown --version 以后每次使用,记住这一套: cd D:\V .\.venv\Scripts\Activate.ps1 python -m markitdown "中文 文件名.xlsx" -o "中文 文件名.md" 💡 用 python -m markitdown 而不是直接 markitdown——不依赖 PATH,不依赖 venv 是否激活,Windows 上最稳妥的写法。路径含中文或空格时务必加引号。 安装说明 需要 Python 3.10 及以上版本。 ...

June 24, 2026 · 2 min

只改一个文件,README 自动同步——用 GitHub Actions 告别手动维护

维护开源项目或工具清单时,经常会遇到一个问题:数据文件改了,README 忘记同步。时间一长,两边对不上,要么手动逐条复制,要么干脆摆烂。 这篇文章用一个真实场景——书签工具清单——来演示怎么用 GitHub Actions + Python 脚本,实现「只改 bookmarks.yaml,README 自动更新」的工作流。 思路 整个方案分两部分: Python 脚本:读取 bookmarks.yaml,按固定格式生成 README.md GitHub Actions:监听 bookmarks.yaml 的变动,自动触发脚本并提交结果 改动 bookmarks.yaml 之后,不管是本地 push 还是直接在 GitHub 网页上编辑,都会自动触发,不需要手动运行任何命令。 数据文件结构 bookmarks.yaml 的结构很简单,每个分类包含图标、名称和工具列表: - category: 编程工具 icon: 🛠️ items: - name: Zed url: https://zed.dev/ desc: 轻量极速的现代代码编辑器 opensource: true - name: WezTerm url: https://wezfurlong.org/wezterm desc: 高性能跨平台终端模拟器 opensource: true opensource: true 是可选字段,没有这个字段默认视为非开源。 Python 脚本 新建 gen_readme.py,放在仓库根目录: #!/usr/bin/env python3 import yaml HEADER = """# 🛠️ tools > 精选隐私友好、开源优先的实用工具清单。 > A curated list of privacy-friendly, open-source tools I actually use. 🔓 = 开源 / Open Source --- """ FOOTER = """ --- 欢迎提 Issue 或 PR 推荐新工具。 """ def generate_readme(yaml_path="bookmarks.yaml", output_path="README.md"): with open(yaml_path, "r", encoding="utf-8") as f: data = yaml.safe_load(f) lines = [HEADER] for category in data: icon = category.get("icon", "") name = category.get("category", "") items = category.get("items", []) lines.append(f"## {icon} {name}\n") lines.append("| 工具 | 描述 | 开源 |") lines.append("|------|------|------|") for item in items: tool_name = item.get("name", "") url = item.get("url", "") desc = item.get("desc", "") opensource = "🔓" if item.get("opensource") else "" lines.append(f"| [{tool_name}]({url}) | {desc} | {opensource} |") lines.append("") lines.append(FOOTER.strip()) with open(output_path, "w", encoding="utf-8") as f: f.write("\n".join(lines)) print(f"✅ README.md 已生成,共 {len(data)} 个分类") if __name__ == "__main__": generate_readme() 几个关键点: ...

June 8, 2026 · 3 min
本站累计访问 次 · 访客