半自动化生成博客相册
下面有完整代码,自行复制
环境
Hexo Butterfly 主题
本地运行脚本需要安装 Python 3
文件层级要求
首先你要知道 Butterfly 的相册格式,类似下面这样:
1 | {% gallery %} |
当然里面可以插入网络图片或者本地图片,如果你是网络图片或者混用就不用往下看了,这里只针对使用本地图片。
然后文件层级要类似下面这样:
1 | | // 这是 Hexo 博客的根目录 |
或者形如以下:
1 | | // 这是 Hexo 博客的根目录 |
然后我们打开 index.md
的大概结构如下:
1 | --- |
脚本
首先贴上完整脚本:
1 | import os |
- 仅适用于 Windows 系统,如果是 Linux 要做出微小修改。
- 使用前需要清除之前生成的相册格式
将此脚本保存到和 index.md
同级目录,然后定位到该目录执行 python <你保存的文件名>.py
即可使用。
解析
下面我来解析一下这个脚本,轻喷,我两天前才玩的 Python
导入模块
首先使用 import os
导入 os 模块
获取路径
1 | path = os.path.split(os.path.realpath(__file__))[0] |
获取脚本所在位置的绝对路径保存在 path
,使用 rfind()
函数从右往左找到第一个 source
字符如果你后面也有自己起这个名字的文件夹我就没办法了,然后使用分片截取 source\
后的路径保存在 path2
。
遍历文件名
1 | os.chdir(path+"\images") |
使用 chdir()
切换工作目录到当前目录下的 images
目录,也就是放图片的目录,以便获取图片,然后遍历目录下的所有文件名称保存在 ls_file
中。
处理格式
1 | md_text = "\n{% gallery %}\n" |
现在我们已经获取好了所有文件名,并且得到了 path2
——从 source 到当前位置的相对路径
。
接着在第 1 行和第 7 行声明了相册的基本格式,第 3 行到第 5 行使用循环处理好了 MarkDown 图片格式。
1 |  |
这是 MarkDown 图片格式,所以我们要把去掉后缀的文件名放到 描述
中,把图片的相对路径放到 链接/路径
中。
用 os.path.splitext(filename)
就可以轻松分开文件名和后缀,由于我们只需要文件名所以使用 os.path.splitext(image)[0]
,这里已经传入了文件名。
然后使用 str()
把相对路径 path2
转化为字符串并且加上图片的文件名。
最后整理好格式,使用 +
将各部分连接好,并且使用 replace()
替换所有的 \
为/
就成型了。
写入文件
1 | os.chdir(path) |
上一步已经把处理好的相册格式存放在 md_text
中,紧接着使用 chdir()
切换到脚本所在目录,这里有 index.md
以便我们写入。
with open(filename) as file:
这是固定格式,不必多讲,不过一定要注意使用 'a'
切换到追加模式,以免丢失原来的模板;使用 encoding='utf-8'
指定编码,以免写入中文时乱码。
懒是人类进步阶梯
这是我用 Python 写的第一个玩意儿,主要是每次都要手动加好麻烦,我就想能不能用 Python 写一个脚本处理。学了两天,写的不是很好,比如不能自动识别原来已有的格式进行替换,每次都要手动去清除,又或者得手动执行,不能在 Hexo 部署的时候进行执行。