碎碎念
使用Gridea构建的静态博客有以下不便:
- 加载图片的Markdown代码与Obsidian并不统一。 我习惯于在Obsidian中编写博客、所见即所得,而由于相关代码不统一,我不能直接将Obsidian的Markdown代码复制入Gridea中,而是需要通过
转换程序
等方式进行处理。如果人工添加,则需要在Gridea右侧的菜单栏按钮中一张一张添加,这是很繁琐的。
去掉文件名前缀的转换程序:
import os
PREFIX = "Pasted image "
def remove_prefix_from_filename(filename):
if filename.lower().startswith(PREFIX.lower()):
return filename[len(PREFIX):]
return None
def main():
for filename in os.listdir('.'):
if os.path.isfile(filename):
new_name = remove_prefix_from_filename(filename)
if new_name and not os.path.exists(new_name):
print(f"Renaming: {filename} -> {new_name}")
os.rename(filename, new_name)
elif new_name and os.path.exists(new_name):
print(f"Skipping (target exists): {filename} -> {new_name}")
if __name__ == "__main__":
main()
将obsidian的图片格式转换为Gridea格式的转换程序:
import re
import sys
def main(src_path: str, dst_path: str):
pattern = re.compile(
r'!\[\[Pasted image ([0-9]{8}[0-9]{6}\.png)\]\]',
flags=re.IGNORECASE
)
with open(src_path, 'r', encoding='utf-8') as f:
content = f.read()
new_content = pattern.sub(
lambda m: f'})',
content
)
with open(dst_path, 'w', encoding='utf-8') as f:
f.write(new_content)
print(f'已处理并保存:{dst_path}')
if __name__ == '__main__':
if len(sys.argv) != 3:
print('用法:python obsidian2gridea.py <源文件.md> <目标文件.md>')
sys.exit(1)
src_file = sys.argv[1]
dst_file = sys.argv[2]
main(src_file, dst_file)