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!用户不放心的话可以先备份,在测试