图片保存到本地并替换markdown中的url地址

为了本地备份随笔内容

  • 用到requests下载图片和re解析markdown文本

代码如下:

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
36
37
38
39
40
41
import re  
import os
import requests

# markdown文件的路径,绝对路径
markdown_file_path = "C:\\Users\\wuyucun\\Desktop\\1_sim_test\\2_md file\\基于ProDiag的监控视图-LAD篇.md"

# 读取markdown文件内容
with open(markdown_file_path, 'r', encoding='utf-8') as file:
markdown_content = file.read()

# 使用正则表达式匹配所有URL地址
urls = re.findall(r'!\[[^\]]*\]\(([^)]*\.png)\)', markdown_content)

# 存储所有URL地址
url_list = []
for url in urls:
url_list.append(url)

# 下载图片到本地
for url in url_list:
response = requests.get(url)
if response.status_code == 200:
image_name = os.path.basename(url)[:255] # 限制图片名字长度不超过255个字符
image_dir = os.path.join(os.path.dirname(markdown_file_path),"picture_libs")#markdown文件目录同级下名为picture_libs的文件夹
image_path = os.path.join(image_dir,image_name)#带绝对路径带文件名
image_relpath = os.path.relpath(image_path,os.path.dirname(markdown_file_path))#计算相对路径
with open(image_path, 'wb') as file:
file.write(response.content)
print(f"图片 {image_name} 下载成功")
# 替换markdown文件中的URL地址,这里的image_path需要改成相对路径
markdown_content = markdown_content.replace(url, image_relpath)
else:
print(f"图片 {url} 下载失败")
continue

# 将替换后的内容写回markdown文件
with open(markdown_file_path, 'w', encoding='utf-8') as file:
file.write(markdown_content)

print("完成")

已找到为什么在Markdown中本地的url地址打不开的原因:

  • 对于本地图片而言,markdown不支持绝对路径
  • 图片或者路径名称中不要带空格,不然识别不了;
  • ![picture_name](..\\my_picture.png "相对路径演示,上一级目录")
  • ![picture_name](.\\pics\\my_picture.png "相对路径演示,下一级目录")

拓展:

1
2
3
4
//url语法
[url连接显示名,可省略](url地址,相对或者绝对地址 "url标题,可省略")
//html对应语法
<a href="url地址" title="url标题">url连接显示名</a>

图片保存到本地并替换markdown中的url地址
http://example.com/2024/07/21/图片保存到本地并替换markdown中的url地址/
作者
xiao cuncun
发布于
2024年7月21日
许可协议