typora删除不用图片
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))