1. Markdown Processor (Markdown 文件处理器)
一款使用 Python 编写的强大的 Markdown 处理工具,提供 Markdown 文本格式化和图片管理功能。
项目网址:markdown-processor
如果觉得不错记得给项目标个星哦!
2. 运行环境
- python3.11
- Pillow==11.0.0
- Requests==2.32.3
3. 功能特性
3.1. 文本处理功能
- 列表转表格:将列表格式转换为 Markdown 表格
- 预处理 Markdown 内容:综合文本格式化处理
- 中英文之间添加空格:自动在中英文之间添加空格
- 标题级别调整:增加或减少所有标题级别
- 章节编号更新:自动更新 Markdown 文件的章节编号
- 换行符规则处理:按照规则在每行末尾添加换行符
3.2. 图库处理功能
- 图片名称管理:添加或删除图片名称
- 图片路径修改:修改图片路径(路径拼接)
- 图片提取与聚合:在本地图片库和 Markdown 文件目录之间移动图片
- 图片重命名:将图片名称转换为 UUID 格式(支持本地和阿里云 OSS)
- 网络图片下载:下载网络图片到本地并重命名为 UUID 格式
- 冗余图片清理:删除本地或阿里云 OSS 中未使用的图片
4. 安装指南
4.1. 安装 Python 依赖
pipinstall-r requirements.txt依赖包:
- Pillow==11.0.0
- Requests==2.32.3
4.2. 阿里云 OSS 配置(可选,用于 p07 和 p10 功能)
4.2.1. 开通阿里云 OSS 云存储
- 注册阿里云账号并实名认证
- 进入 OSS 控制台(https://oss.console.aliyun.com/)
- 创建 Bucket(存储空间)
- 获取 AccessKey ID 和 AccessKey Secret
4.2.2. 安装和配置 ossutil64 工具
- 下载 ossutil64 工具:https://help.aliyun.com/zh/oss/developer-reference/install-ossutil
- 配置 ossutil64:
ossutil64 config按照提示输入:
- Endpoint: 根据 Bucket 所在地域选择(如 oss-cn-hangzhou.aliyuncs.com)
- AccessKey ID: 您的 AccessKey ID
- AccessKey Secret: 您的 AccessKey Secret
4.2.3. 修改代码中的 OSS 配置
在markdown_processor.py文件中,找到以下常量定义:
# OSS图片目录路径OSS_IMAGES_URL="oss://zdy-notebooks/images"将其修改为您自己的 OSS 路径:
# 修改为您的OSS路径格式:oss://<bucket-name>/<directory>OSS_IMAGES_URL="oss://your-bucket-name/your-directory"5. 使用方法
5.1. 交互式版本
运行交互式版本,按照菜单提示操作:
python main.py5.1.1. 运行模式说明
- 文本处理(t01-t07):
- t01:列表转表格。
- t02:预处理 markdown 内容。
- t03:中英文之间添加一个空格。
- t04:所有标题增加一级(标题左移)。
- t05:所有标题减少一级(标题右移)。
- t06:更新 markdown 文件的章节编号。
- t07:按照一定规则在 markdown 文件的每行末尾增加换行符。
- 图库处理(p01-p10):
- p01:为 markdown 文件中的图片添加名字。e.g. modify_image_path: 修改图片路径change_image_name_to_uuid: 根据本地图片库,把 markdown 文件中的图片名字换成 UUID 格式increase_title_level: 所有标题增加一级(标题左移)decrease_title_level: 所有标题减少一级(标题右移)list_to_table: 列表转表格download_web_image: 下载 markdown 文件中的网络图片到本地
6. 项目结构
markdown_processor/ ├── main.py # 交互式版本主程序 ├── main-cmdline.py # 命令行版本主程序 ├── markdown_processor.py # 核心处理模块 ├── rules.py # 文本处理规则定义 ├── requirements.txt # Python依赖包 ├── build.sh # Linux构建脚本 ├── build.bat # Windows构建脚本 ├── icon.ico # 应用程序图标 ├── markdown_processor_cmdline_bash_completion.sh # Bash自动补全脚本 └── upload-notebook-image.sh # 上传笔记本图片脚本7. 构建和打包
7.1. Linux
chmod+x build.sh ./build.sh7.2. Windows
build.bat构建完成后,会在dist目录下生成两个可执行文件:
markdown-processor(交互式版本)markdown-processor-cmdline(命令行版本)
8. 规则系统说明
项目包含一个强大的规则系统(定义在rules.py中),用于文本格式化:
8.1. 主要规则类别
- REGEX_RULES: 基础正则表达式规则
- 中英文标点转换
- 空格处理
- 列表格式标准化
- 特殊字符处理
- …
- TO_TITLE_RULES: 标题大小写规则
- 将特定单词转换为首字母大写(如 Windows, Linux, Python 等)
- TO_UPPER_RULES: 大写规则
- 将特定单词转换为全大写(如 IP, VFS, F2FS 等)
- TO_LOWER_RULES: 小写规则
- 将特定单词转换为全小写(如 Shell 等)
- SPACE_RULES: 空格规则
- 中英文之间添加空格
- 路径和参数周围添加空格
- 特殊标点处理
- …
- GLOBAL_SPACE_RULES: 全局空格规则
- 行代码前后添加空格
- …
9. 注意事项和限制
9.1. 平台兼容性
- 大部分功能支持 Windows、Linux 和 MacOS
- 阿里云 OSS 相关功能(p07, p10)仅支持 Linux 平台
- 需要安装并配置
ossutil64工具才能使用 OSS 功能
9.2. 文件处理
- 支持处理单个文件或整个目录
- 仅处理
.md扩展名的文件 - 图片处理功能需要确保图片文件存在
9.3. 编码要求
- 所有 Markdown 文件必须使用 UTF-8 编码
- 使用 LF(\n)作为换行符
9.4. 标题级别
- 章节编号功能最多支持 5 级标题
- 标题级别调整功能也最多支持 5 级标题
10. 使用示例
10.1. 示例 1:预处理 Markdown 文件
# 交互式版本python main.py# 输入运行模式: t02# 输入文件路径: ./docs/example.md# 命令行版本python main-cmdline.py preprocess_content -f ./docs/example.md10.2. 示例 2:下载网络图片
# 交互式版本python main.py# 输入运行模式: p08# 输入文件路径: ./docs/example.md# 输入保存路径: ./images# 命令行版本python main-cmdline.py download_web_image -f ./docs/example.md -s ./images10.3. 示例 3:清理冗余图片
# 交互式版本python main.py# 输入运行模式: p09# 输入目录路径: ./docs# 输入本地图片库路径: ./images11. 功能详细说明
11.1. download_web_image 功能过滤说明
download_web_image功能(交互式版本 p08,命令行版本download_web_image)在下载网络图片时会自动过滤以下类型的链接:
if(img_url.startswith("https://zdy-notebooks")orimg_url.startswith("/")orimg_url.startswith("./")orimg_url.startswith("../")orimg_url.startswith("D:")orimg_url.startswith("91 图片文件")):# 跳过这些链接,不进行下载过滤原因:
https://zdy-notebooks:阿里云 OSS 图片链接,已经是云端存储,无需重复下载/、./、../:本地文件路径,不是网络图片D::Windows 盘符路径,本地文件91 图片文件:特定的本地图片目录路径
按需修改或删除过滤:
如果需要修改过滤规则,请在markdown_processor.py文件的_download_web_image方法中修改上述条件判断逻辑:
- 删除过滤:删除整个
if条件判断,使所有链接都尝试下载 - 修改过滤:根据需要添加或删除特定的
startswith条件 - 添加新过滤:在条件中添加新的
or img_url.startswith("your-pattern")
注意:修改过滤规则后,请确保理解可能带来的影响,如重复下载本地图片或云存储图片。
11.2. upload-notebook-image.sh 脚本使用原理
upload-notebook-image.sh脚本是一个自动化工作流工具,用于管理使用 Git 管理的笔记本项目中的图片。其工作原理如下:
11.2.1. 使用场景
- 整个笔记本项目使用 Git 管理
- 写文章时先将图片保存在工程的类似
91 图片文件目录下 - 文章写完后,使用此脚本批量上传本地图片到阿里云 OSS,并替换工程中对应笔记的图片链接
11.2.2. 工作流程
- 压缩 PNG 图片:使用
pngquant压缩所有 PNG 图片以减小文件大小 - 文档处理:
- 使用
git diff找出相对于origin/main分支有修改的文件 - 对每个修改的文件执行:
markdown-processor-cmdline change_image_name_to_uuid:将图片名称转换为 UUID 格式markdown-processor-cmdline modify_image_path:将图片路径替换为阿里云 OSS 路径
- 使用
- 上传图片:使用
ossutil64将本地图片目录中的所有图片上传到阿里云 OSS - 清理本地图片:上传完成后删除本地图片目录中的所有图片
11.2.3. 使用方法
./upload-notebook-image.sh --notebook_dir=NOTEBOOK_DIR --image_dir=IMAGE_DIR参数说明:
--notebook_dir:笔记本项目根目录路径--image_dir:本地图片目录路径(如91 图片文件)
11.2.4. 前置要求
- 安装
pngquant图片压缩工具 - 安装并配置
ossutil64阿里云 OSS 工具 - 安装
markdown-processor-cmdline命令行工具(通过项目构建获得)
12. 故障排除
12.1. 常见问题
- 导入错误: 确保已安装所有依赖包
- 文件不存在错误: 检查文件路径是否正确
- 权限错误: 确保有文件读写权限
- OSS 工具错误: 确保 ossutil64 已正确安装和配置
提示: 使用前请备份重要文件,本工具会直接修改原文件内容。