欢迎光临散文网 会员登陆 & 注册

typora删除不用图片

2023-07-24 22:52 作者:ding钢盔  | 我要投稿


typora

    typora是一款非常好用的文本编辑软件,拿来写代码或者记笔记非常不错。他的目录结构我很喜欢,比国产的软件好用多了。

    但是他有个问题我不得不吐槽,没有多端同步很不好用,想在别的地方看下笔记很不方便,而且分享需要导出也很麻烦。然后还有一个问题,今天我解决了。就是删除文本,图片不一起删除的问题。

 删除已经不用的图片思路

 本示例使用python实现

 1. 遍历文档目录,找出所有图片,并存入列表

 2. 遍历所有文档,使用正则表达式找出所有正在使用的图片

 3. 做差,所有图片减去正在使用的图片,剩下的就是不用的图片

 4. 再次遍历,将不用的图片删除

 代码

import os

import re

import shutil


import win32api


list_img1 = []  # 全部图片名称

list_img2 = []  # 使用的图片名称

list_img3 = []  # 不用的图片名称


path_file = 'D:\APPFILE\\typora'   # 图片和文本的目录

path_file_back = 'D:\APPFILE\备份'   # 图片和文本的目录

img_name = "图片" # 保存图片的目录名


pattern0 = r'图片/(\w+.*\.png)'

pattern1 = r'图片/(\w+.*\.jpg)'

pattern2 = r'图片/(\w+.*\.gif)'

pattern3 = r'图片/(\w+.*\.webp)'

pattern4 = r'图片/(\w+.*\.jpeg)'


pattern5 = r'图片\\(\w+.*\.png)'

pattern6 = r'图片\\(\w+.*\.jpg)'

pattern7 = r'图片\\(\w+.*\.gif)'

pattern8 = r'图片\\(\w+.*\.webp)'

pattern9 = r'图片\\(\w+.*\.jpeg)'


# 找出所有图片

def get_img(directory):

    global list_img1

    # 获取目录下的所有文件和子目录

    files = os.listdir(directory)

    for file in files:

        if file == img_name:

            filee = os.listdir(os.path.join(directory, file))

            for i in filee:

                list_img1.append(i)


        # 如果是子目录,则递归遍历

        if os.path.isdir(os.path.join(directory, file)):

            get_img(os.path.join(directory, file))


# 找出所有正在使用的图片

def get_file(directory):

    global list_img2

    # 获取目录下的所有文件和子目录

    files = os.listdir(directory)

    for file in files:

        # 如果是子目录,则递归遍历

        if os.path.isdir(os.path.join(directory, file)) and file != img_name:

            get_file(os.path.join(directory, file))

            # 如果是文件,则输出文件名

        elif os.path.isfile(os.path.join(directory, file)):

            fil = open(os.path.join(directory, file), 'r', encoding='utf-8')

            text = fil.read()

            results0 = re.findall(pattern0, text)

            results1 = re.findall(pattern1, text)

            results2 = re.findall(pattern2, text)

            results3 = re.findall(pattern3, text)

            results4 = re.findall(pattern4, text)

            results5 = re.findall(pattern5, text)

            results6 = re.findall(pattern6, text)

            results7 = re.findall(pattern7, text)

            results8 = re.findall(pattern8, text)

            results9 = re.findall(pattern9, text)


            for i in results0:

                list_img2.append(i)

            for i in results1:

                list_img2.append(i)

            for i in results2:

                list_img2.append(i)

            for i in results3:

                list_img2.append(i)

            for i in results4:

                list_img2.append(i)

            for i in results5:

                list_img2.append(i)

            for i in results6:

                list_img2.append(i)

            for i in results7:

                list_img2.append(i)

            for i in results8:

                list_img2.append(i)

            for i in results9:

                list_img2.append(i)


# 找出不用的图片

def lack_img():

    global list_img3

    list_img3 = set(list_img1) - set(list_img2)


# 删除不用的图片

def rm_img(directory):

    # 获取目录下的所有文件和子目录

    files = os.listdir(directory)

    for file in files:

        if file == img_name:

            filee = os.listdir(os.path.join(directory, file))

            set1 = set(filee)

            set2 = set(list_img3)

            intersection = set1.intersection(set2)

            for i in intersection:

                try :

                    shutil.move(os.path.join(directory, '图片', i), path_file_back)

                except Exception as e:

                    print(str(e)+'e')


        # 如果是子目录,则递归遍历

        if os.path.isdir(os.path.join(directory, file)):

            rm_img(os.path.join(directory, file))


get_img(path_file)

get_file(path_file)

lack_img()

rm_img(path_file)


print("所有图片数量:", len(list_img1))

print("文本使用图片数量:",len(list_img2))

print("不使用图片数量:",len(list_img3))



typora删除不用图片的评论 (共 条)

分享到微博请遵守国家法律