Migrate Hexo Posts to Hugo
2023年10月26日 · 511 字 · 2 分钟 · Posts Hexo Hugo
最近实在被hexo的构建速度感动到了,我就几十篇posts就给我卡半天,果断润到hugo了。
但是很多基于hexo Butterfly主题的posts需要重新按照hugo ladder主题的字段进行修改,不然不能正常渲染构建,于是便有了下面的python脚本。
我只修改了frontmatter的部分字段,请按需修改,谨慎使用!
- 配置环境
pip install frontmatter
pip install pyyaml
- 原神,启动!
import os
import re
import shutil
import yaml
from datetime import datetime, timezone, timedelta
# 输入文件夹和输出文件夹的路径
input_folder = './posts/'
output_folder = './posts_n/'
# 遍历输入文件夹中的所有Markdown文件
for filename in os.listdir(input_folder):
if filename.endswith('.md'):
# 构建输入和输出文件的完整路径
input_file_path = os.path.join(input_folder, filename)
output_file_path = os.path.join(output_folder, filename)
# 打开输入文件并读取内容
with open(input_file_path, 'r', encoding='utf-8') as input_file:
content = input_file.read()
# 使用正则表达式找到frontmatter
frontmatter_match = re.match(r'---\n(.*?)\n---', content, re.DOTALL)
if frontmatter_match:
frontmatter_text = frontmatter_match.group(1)
post = yaml.load(frontmatter_text, Loader=yaml.FullLoader)
# 保留需要的字段
post = {
# 这里date的算法出问题了,用的是当前时间,应该用源文档中的date,但我懒得改了
'date': datetime.now(timezone(timedelta(hours=8))).strftime('%Y-%m-%dT%H:%M:%S%z').replace('+0800', '+08:00'),
'title': f'"{post["title"]}"',
'description': post.get('description', ''),
'tags': post.get('tags', []),
'slug': post.get('abbrlink', ''),
'featured': True
}
# 构建修改后的frontmatter文本
new_frontmatter = '---\n'
for key, value in post.items():
new_frontmatter += f'{key}: {value}\n'
new_frontmatter += '---\n'
# 将修改后的内容写入输出文件
with open(output_file_path, 'w', encoding='utf-8') as output_file:
output_file.write(new_frontmatter + content[len(frontmatter_match.group(0)):])
碎碎念:以后还是尽量用基本markdown语法吧,很多语法,例如toggle,好用倒是非常好用,但是一旦迁移框架的时候简直是蛋疼🤣