Chosen
(Lonng)
1
如何从Joplin迁移笔记到Obsdian
遇到的问题
如何从Joplin迁移笔记到Obsdian?我安装Joplin导出markdown文件的方法导出,发现诸如
“小于号(这里如果打<会被识别为图片)img width=“780” height=“575” src=“…/_resources/Lily_Screenshot_113f0.jpg”/>”的图片无法被正常识别
仔细叙述你的问题。最好附上自己使用的 Obsidian 版本及环境。
预期的效果
希望能够较为完美的将图片迁移到Obsidian中,我认为Obsidian的移动端对于扩展的支持对我很重要
另外Obsidian有更好的中文论坛,所以有问题能够更好的与各位大神交流
已尝试的解决方案
暂时不知道如何解决,求助各位大神。
1 个赞
Chosen
(Lonng)
2
解决办法
所以通过Ai写了一段代码将不能被识别的格式修正为可以被识别的格式
import os
import re
# 正则表达式匹配HTML的img标签,并捕获src属性的值
img_regex = r'<img[^>]+src="([^"]+)"[^>]*>'
# 将HTML图片标签转换为Markdown格式
def html_img_to_markdown(match):
src = match.group(1)
# return f'<img src="{src}">'
return f'![]({src})' # 返回正确的格式
# 处理单个Markdown文件
def process_md_file(file_path):
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
# 使用正则表达式替换HTML图片标签为Markdown格式
new_content = re.sub(img_regex, html_img_to_markdown, content)
with open(file_path, 'w', encoding='utf-8') as f:
f.write(new_content)
# 遍历目录并处理所有Markdown文件
def process_md_files(directory):
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith('.md'):
file_path = os.path.join(root, file)
process_md_file(file_path)
# 主函数
def main():
# 设置相对目录路径(相对于当前脚本所在的目录)
relative_directory_path = './no'
# './no' 为相对路径,我这里将md文件全保存到了no文件夹下
# 获取绝对路径,以确保正确处理文件
absolute_directory_path = os.path.abspath(relative_directory_path)
# 处理目录下的所有Markdown文件
process_md_files(absolute_directory_path)
print(f"All Markdown files in '{absolute_directory_path}' have been processed.")
# 如果脚本作为主程序运行,则调用主函数
if __name__ == '__main__':
main()
其所需要的目录树为
project_root/
├── main.py # 包含上述Python脚本的文件
├── no
├──1.md
├──2.md
├──... # 其他md文件
└── _resources/ # 图片和其他资源存放的目录
├── Lily_Screensh3f0.jpg
├── another_image.jpg
└── ... # 其他图片文件
1 个赞
非常感谢!很好用,改了下路径,完美解决。我竟然没想过可以用 python 去批量处理。