python提取markdown图片到当前文件夹并修改图片路径

文章讲解了如何编写Python脚本来自动提取Markdown中的图片路径,将它们转换为相对路径,并支持从命令行参数输入。脚本适用于简化Markdown文件分享过程。
摘要由CSDN通过智能技术生成

发送markdown给别人时,图片路径老是让人恼火~

使用python脚本把markdown文件中图片提取,放到指定文件夹中,并修改md文件内路径为相对路径

包含python包 argparse, os, shutil, re

当前文件夹只有一个md文件时,默认把该文件作为输入,输出的md文件默认为原文件名

argparse.ArgumentParser() 从命令行获取md文件路径, 输出md文件名, 存图片文件夹名:

file_list = os.listdir()
count_md = 0
md_file = ''
for file in file_list:
    if file[-3:] == '.md':
        count_md += 1  # 计算当前文件夹md文件个数
        md_file = file
parser = argparse.ArgumentParser()
# 给这个解析对象添加命令行参数
if count_md == 1:  # 当前文件夹只有一个md文件
    parser.add_argument('--input', type=str, default=md_file, help='markdown file')
else:
    parser.add_argument('--input', type=str, help='markdown file')
parser.add_argument('--imgdir', type=str, default='img', help='存图片文件夹')
parser.add_argument('--output', type=str, help='输出md文件名')
args = parser.parse_args()

使用re进行正则提取md中文件路径,markdown中图片格式有 ![]()<img src=""> 两种,分别判断:

img_md = re.findall(r'!\[.*?\]\((.*?)\)', md)
img_html = re.findall(r'<img src="(.*?)" .*?/>', md)
img_paths = img_md + img_html

os.path.basename 获取文件路径的最后一段 (图片文件名) , shutil.copy 复制图片,replace进行替换

完整代码为:

import argparse
import os
import shutil
import re
# 当前文件夹内md个数计算
file_list = os.listdir()
count_md = 0
md_file = ''
for file in file_list:
    if file[-3:] == '.md':
        count_md += 1
        md_file = file
# 添加命令行参数
parser = argparse.ArgumentParser()
if count_md == 1:
    parser.add_argument('--input', type=str, default=md_file, help='markdown file')
else:
    parser.add_argument('--input', type=str, help='markdown file')
parser.add_argument('--imgdir', type=str, default='img', help='存图片文件夹')
parser.add_argument('--output', type=str, help='输出md文件名')
args = parser.parse_args()
imgdir = args.imgdir
mdout = 'mdout'  # 输出内容所在文件夹
print(f"输入文件: {args.input} 图片文件夹: {args.imgdir} 输出文件: {args.output}")
if args.output == None:  # 没有规定输出md文件名,则默认用原文件名
    args.output = os.path.join(mdout, os.path.basename(args.input))

print(f"输入文件: {args.input} 图片文件夹: {args.imgdir} 输出文件: {args.output}")
# 文件夹创建
if not os.path.exists(mdout):
    os.makedirs(mdout)
if not os.path.exists(os.path.join(mdout, imgdir)):
    os.makedirs(os.path.join(mdout, imgdir))
with open(args.input, 'r', encoding='utf-8') as f:
    md = f.read()
# 正则提取
img_md = re.findall(r'!\[.*?\]\((.*?)\)', md)
img_html = re.findall(r'<img src="(.*?)" .*?/>', md)
img_paths = img_md + img_html

for i in img_paths:
    img = os.path.join(imgdir, os.path.basename(i))
    shutil.copy(i, os.path.join(mdout, img))
    md = md.replace(i, img)

with open(args.output, 'w', encoding='utf-8') as f:
    f.write(md)

之后可以在 mdout 文件夹中找到输出md文件,里面的img文件夹存放了md包含的图片

效果为:

原md文件内容:

<img src="/Users/a/Library/Application Support/typora-user-images/image-20231229172044214.png" alt="image-20231229172044214" style="zoom:50%;" />

![image-20240122114932405](../../../../Library/Application Support/typora-user-images/image-20240122114932405.png)

这里文件夹内只有test.md一个markdown文件,不输入参数,用默认处理

show

处理后md文件内容:

<img src="img/image-20231229172044214.png" alt="image-20231229172044214" style="zoom:50%;" />

![image-20240122114932405](img/image-20240122114932405.png)

之后就可以把整个mdout文件夹压缩发给别人,在别人电脑上也可以正常显示了

有问题欢迎交流呢~

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值