typora assets文件夹瘦身

typora assets文件夹瘦身

程序作用

typora编辑器设置本地图片保存路径为 {filename}.assets 之后,复制黏贴的图片会自动保存在这个 {filename}.assets。问题来了,复制文件,图片会自动保存到assets文件夹,并在markdown文件产生该图片链接语法![](),但是删除、修改markdown中的图片链接语句,并不会删除assets删除图片,这导致了经常assets文件夹会产生很大的无用图片,本地上是没什么的,但是上传到github等平台就很麻烦,毕竟图片很大,是markdown存储的一个痛点。这个python文件就是读取markdown文件,搜索文件的 ![]() 图片引用,并且删除assets文件夹不会被引用的图片。

源代码

markdown_pic.py
python markdown_pic.py test.md

import re
import os
import sys


# 获取文件的绝对路径并将其转化为linux形式的路径
def parse_path(path: str):
    # os.path.exists(path)
    if not os.path.isfile(path):
        print("file {0} is not exist".format(path))
        exit(-1)
    path = os.path.abspath(path)
    regex = re.compile(r"\\+")
    path = re.split(regex, path)
    path = '/'.join(path)
    index = path.rfind("/")
    file_name = path[index + 1:]
    dir_name = path[0:index + 1]
    return dir_name, file_name


def delete_useless_markdown_pic(path: str):
    dir_name, file_name = parse_path(path)
    with open(path, "r", encoding="utf-8") as f:
        s = f.readlines()
        s = "".join(s)
        # .*? 匹配符号内的所有字符
        # https://blog.csdn.net/m0_37696990/article/details/105925940 markdown内容提取
        results_img = re.findall(r'!\[.*?\]\((.*?)\)', s)  # 提最述与rul
        results_src = re.findall(r'<img\s*(.*?)\s*/>', s)
        print("url img")
        print(results_src)
        set_pic = set()
        set_asset = set()
        asset = file_name.split(".")[0] + ".assets"
        asset_path = dir_name + asset
        for result in results_img:
            if result.split("/")[0] == asset:
                set_pic.add(result.split("/")[-1])
        for result in results_src:
            result = result.split("alt")[0].strip().split("=")[-1].strip().strip('"')
            if result.split("/")[0] == asset:
                set_pic.add(result.split("/")[-1])
        if len(set_pic) == 0:
            return

        print(set_pic)
        dirs = os.listdir(asset_path)
        for i in dirs:
            set_asset.add(i)

        set_delete = set_asset - set_pic
        for i in set_delete:
            os.remove(asset_path + "/" + i)


if __name__ == '__main__':
    if len(sys.argv) != 2:
        print("usage like this:python markdown_pic.py xx.md")
        exit(-1)
    markdown = sys.argv[1]
    dirname, filename = parse_path(markdown)
    print(dirname)
    print(filename)
    delete_useless_markdown_pic(markdown)

注意

本地测试过,ok!用户不放心的话可以先备份,在测试

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值