从Hexo到Hugo
从一个框架到另外一个框架的过渡,比较麻烦的就是文章的迁移,尤其是文章数量较多的时候。如果一个一个手动更改 MD 文档的头部配置信息,无疑是一个巨大的工程量。这个时候我们可以考虑使用脚本来完成重复性操作。
观察Hexo和HuGo的文档头部配置,很相近。

一个是类似于yaml的配置文件,一个类似于toml的配置文件。
思路
我是这样思考的:
-
把Hexo
的_post
路径下的所有文章全部复制到新的文件夹(怂,不敢对源文件直接操作)重命名Old
,继续新建一个文件夹New
,存放更改好的文件。
-
遍历此目录下的所有文件,使用os的读写操作,截选配置部分,进行解析,拿到单个参数对应的值。
-
把值按照Hugo的格式进行拼接,拿到Hugo的头部配置
-
把头部文件和剩余的正文部分,拼接,写入新的文件中,完成。
困境
思路很简单,就是文件字符的拼接罢了。
但是在实际操作中,发现以前博客的头部格式书写的并不规范,有时有好几个tags
,这种情况使用正则直接提取---xxxx---
的部分最方便,但是我写不好表达式,无奈只能按行读取按行取大致的前10行左右,通过判读符号:
是否存在来确定内容是否是头部配置部分。而时间中的:又会影响我使用列表分片取值,而且文章有大量的转义字符等,这些都需要考虑进去…..我哭了。。。乱七八糟写了一堆 if..else
,终于能把头部配置转换过去了。
结果,正文部分的截取我不知道该如何操作了。有一种思路是通过文件修改前几行数据进行覆盖操作,但是百度了好多方法没成功,而且网上似乎对文件的更改操作教程较少。。。另一种思路是把文件内容加载到内存中,赋给一个变量,截选进行替换,但是强转之后是莫名使用不了replace
方法,因为不是Str类型,可实际上已经使用"".join()
方法转换过了。于是我卡在了这个地方,暂时还没有好的想法。。。
部分程序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
import os
for root, dirs, files in os.walk(r'C:\Users\lenovo\Desktop\Old'):
for file in files:
path = os.path.join(root, file)
with open(path, "r+", encoding="utf-8") as f:
data = f.readlines()[0:9]
print(data)
data_list = []
tags = []
for i in data:
if ":" in i and "tags":
info = i.split(": ")
data_list.append(info)
elif "- " in i:
i = i.lstrip()
tags.append(i[2:-1])
# print(data_list)
tag = data_list[2][1].replace("\n", "").lstrip()
tags.append(tag)
for a in tags:
if a == "":
tags.remove(a)
head = "---\n"
new_tag = "tags" + ": " + str(tags).replace("\'", "\"")
new_title = "title" + ": " + data_list[0][1].replace("\n", "")
new_date = "date" + ": " + data_list[1][1].replace(" ", "T").replace("\n", "") + "+08:00"
new_categories = "categories" + ": " + "[\"" + data_list[3][1].replace("\n", "").lstrip() + "\"]"
new_imgurl = "featuredImage" + ": " + "\"" + data_list[4][1].replace("\n", "") + "\""
end = "---\n\n"
head_last = head + new_title + "\n" + new_date + "\n" + "draft: false\n" + new_tag + "\n" + new_categories + "\n" + new_imgurl + "\n" + end
print(path)
print(head_last)
|

这里只实现了从hexo
到hugo
更改头部配置,但是怎么和正文部分合并,还未完成。