删除typora图片目录下失效的图片脚本

背景:md中插入图片与word不同,在word中图片是拷贝了一份放在文件中,与原图片无关,所以无论删除哪个互不影响,但是md中却不同,md中插入图片时用超链接的方式从外部引用,在设置中配置图片存放路径,一般情况下图片的存放路径在c盘,这极大的占用了系统资源,所以初用者最好把路径改为其他盘,因为时间久了,这个目录会非常大。当然看到这篇文章的你一定已经用过很久了。

由于md引用的外部链接,所以在文件中删除图片时只是删除了文本链接,却没有删除图片,导致图片目录中会存放很多失效的图片。所以就在网上找了相关的代码想要解决这个问题,谁也不想重复造轮子吧,有幸找到了,但是在使用中发现了一些问题,所以进行了如下优化

在原作者代码基础上进行优化,优化内容如下:

1、使用正则提取文本中的图片链接

2、原代码在md_path为文件路径的情况下会导致图片全部被删除。所以增加分支,使代码可以处理单独文本也可以处理一个目录

3、原代码直接将图片删除,新代码可选择是删除还是移动到新目录,一般会在桌面创建目录进行存放,目录名为typroa_image_bak+时间戳

4、将所有参数配置全部放到main中

import os
import re
import shutil
import time


# 遍历目录下所有文件,返回文件路径列表
# 输入的是绝对路径则返回绝对路径,输入的是相对路径则返回相对路径
def getfilelist(filetype, path='./',):#默认从当前路径下找
    file_list = list()
    if os.path.isdir(path):
        for dirpath, dirnames, filenames in os.walk(path):
            for filename in filenames:
                if filename.endswith(filetype):#endswith里面可以跟一个元组
                    file = os.path.join(dirpath, filename)
                    file_list.append(file)
    elif path.endswith(filetype):
        file_list.append(path)
    return file_list


# 把pic_list中的路径统一都改为反斜杠
def changeformat(pic_list):
    new_pic_list = list()
    for pic in pic_list:
        pic = pic.replace('/', '\\')
        new_pic_list.append(pic)
    return new_pic_list


# 读取文件,默认以文本读取,编码类型为utf-8
def readfromfile(file, readmode='r', encoding='utf-8'):
    with open(file, readmode, encoding=encoding) as f:
        text = f.read()
    return text


def main(md_path, pic_path, model, is_delect='no'):
    print('开始搜索md文件和图片文件...')
    md_list = getfilelist(path=md_path, filetype='.md')
    pic_list = getfilelist(path=pic_path, filetype=('.png', '.jpg', '.jpeg'))
    pic_list = changeformat(pic_list)

    alive_pic_list = list()
    print('开始遍历md文件内容...')
    for md in md_list:
        print(md)
        text = readfromfile(md)
        # 但凡pic在md中,这个pic就不能删#遍历图片列表每次都和文件内容进行匹配,如果有10张图5个文件,
        # 就需要匹配5*10次
        # 效率太低,改用正则匹配
        if model:
            for pic in pic_list:
                if pic in text and not (pic in alive_pic_list):
                    alive_pic_list.append(pic)
        else:
            #使用正则匹配文中的图片引用
            rule = re.compile("!\[.*?\d+\]\((.*?)\)",re.I)
            result = rule.findall(text)
            #为了防止列表里出现重复值,但是影响不大的话可以直接extend
            for pic in result:
                if pic not in alive_pic_list:
                    alive_pic_list.append(pic)
    print('开始清理无效图片...')
    if is_delect == 'yes':
        for pic in pic_list:
            if not (pic in alive_pic_list):
                print("删除:",pic)
                os.remove(pic)
    if is_delect == 'no':
        mask = 0
        bak_dir_parent = os.path.dirname(os.path.realpath(__file__))
        bak_dir = os.path.join(bak_dir_parent,'typroa_image_bak_'+time.strftime("%Y%m%d%H%M%S", time.localtime()))
        # print(bak_dir)
        if not os.path.exists(bak_dir):
            os.mkdir(bak_dir)
        for pic in pic_list:
            if not (pic in alive_pic_list):
                print('移动:', pic)
                shutil.move(pic,bak_dir)
                mask = 1
        if mask:
            print("保存到“{}”目录".format(bak_dir))
            print('完成')
        else:
            print(">>>>>>>>>>无失效图片<<<<<<<<<<")
            os.rmdir(bak_dir)


if __name__ == '__main__':
    # md路径(可以是目录也可以是具体md文件)
    # md_path = r'C:\Users\shenyangyang\Desktop\嵌入式笔记\1.linux.md'
    md_path = r'C:\Users\shenyangyang\Desktop\嵌入式笔记'
    # 图片保存路径
    pic_path = r'D:\typroa_image'
    #文件中图片搜索模式(1或0,0使用正则匹配(更快),但不同typroa版本存在格式不同的风险)
    model = 0
    #是否删除 yes 直接删除,no移动到备份目录
    is_delect='no'
    main(md_path, pic_path, model, is_delect)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于Typora插入的图片不显示的问题,有几种可能的原因和解决方法。 1. 图片路径错误:确保你插入的图片路径是正确的。在Typora中,可以使用两种方式插入图片:将图片拖拽到Typora编辑窗口中,或者使用Markdown语法`![图片描述](图片路径)`插入图片。如果使用Markdown语法,请确保图片路径是正确的,可以尝试使用绝对路径或相对路径。 2. 图片格式不支持:Typora支持常见的图片格式,如JPEG、PNG、GIF等。如果你插入的图片格式不受Typora支持,可能无法显示。请确保你的图片格式是Typora支持的。 3. 图片被移动或删除:如果你在Typora中插入了一张图片,并且后来将该图片移动或删除了,那么在Typora中就无法显示该图片。请确保你插入的图片没有被移动或删除,并且路径仍然可用。 4. 图片链接问题:如果你插入的是网络上的图片链接,而不是本地文件,确保网络连接正常,并且图片链接地址是正确的。有时候,网络上的图片链接可能会失效或变更。 5. 图片显示设置问题:在Typora中,你可以通过修改显示设置来控制图片的显示方式。请确保你没有禁用或隐藏了图片显示选项。可以在Typora的菜单中找到相关选项。 如果你尝试了以上解决方法但问题仍然存在,可能需要进一步调查。可以尝试重启Typora软件,更新Typora版本,或者在Typora官方论坛上寻求帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值