typora删除多余图片
import os
import re
import shutil
from bs4 import BeautifulSoupimport warningswarnings.filterwarnings('ignore')
# 定义正则表达式用于匹配.md文件中的图片引用语句
pattern = re.compile(r'!\[.*]\((.*)\)')# 获取所有.md文件中的图片引用路径
references = set()
md_filepath = input("请输入 Markdown 文件所在目录的路径 : ")
# md_filepath = r'{}'.format(md_filepath)for file in os.listdir(md_filepath):if file.endswith('.md'): # 扫描该路径下的所有.md文件,并查找其中的图片with open(os.path.join(md_filepath, file), 'r', encoding='utf-8') as f:text = f.read()references.update(pattern.findall(text))soup = BeautifulSoup(text, 'html.parser')for img in soup.find_all('img'):src = img.get('src')if src:references.add(os.path.join(md_filepath, src))print(f"在此路径中的所有.md文件中总共找到的所有图片{len(references)}张\n")
hyperlink_pattern = re.compile(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\$\$,]|(?:%[0-9a-fA-F][0-9a-fA-F]))+')
print("寻找到的超链接:")
print([item for item in references if hyperlink_pattern.search(item)])
# C:\Users\asssio\Desktop\mark
# 删除包含超链接的元素
references_new = [item for item in references if not hyperlink_pattern.search(item)]
print(f"在此路径中的所有.md文件中总共找到引用图片{len(references_new)}张")
print("寻找到的实际链接:")
print(references_new)usedImages = set()
for each in references_new:usedImages.add(each.split('/')[-1])# 获取.assets目录的路径
assets_filepath = input("请输入.assets目录的路径: ")# 遍历.assets目录中的所有文件,将未被引用的图片移动到 delete 目录中
if not os.path.exists(os.path.join(assets_filepath, 'delete')):os.mkdir(os.path.join(assets_filepath, 'delete'))allImageNum = 0
deleteNum = 0
for file in os.listdir(assets_filepath):allImageNum += 1# print(file)if file not in usedImages:shutil.move(os.path.join(assets_filepath, file), os.path.join(assets_filepath, 'delete'))print(f"移动图片{file}到delete文件夹中")deleteNum += 1print(f"assert文件夹中总共有图片{allImageNum}张\n总共移动{deleteNum}张图片到delete中")
运行结果

相关文章:
typora删除多余图片
import os import re import shutil from bs4 import BeautifulSoupimport warningswarnings.filterwarnings(ignore) # 定义正则表达式用于匹配.md文件中的图片引用语句 pattern re.compile(r!\[.*]\((.*)\))# 获取所有.md文件中的图片引用路径 references set() md_filepat…...
【ceph】ceph-mon重新选举的情况
本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…...
PopClip(Mac 划词增强工具)值得购买吗?
PopClip 是一款 Mac 划词操作增强工具,可选装翻译搜索、格式转换等丰富扩展,联动多种软件执行创建提醒事项、添加到笔记等快捷操作,有效提升工作效率。 在 iPhone 或 iPad 内,选词后就会弹出气泡菜单,让你选择执行各种…...
Python | Leetcode Python题解之第227题基本计算器II
题目: 题解: class Solution:def calculate(self, s: str) -> int:n len(s)stack []preSign num 0for i in range(n):if s[i] ! and s[i].isdigit():num num * 10 ord(s[i]) - ord(0)if i n - 1 or s[i] in -*/:if preSign :stack.append(…...
redis源码分析之底层数据结构(一)-动态字符串sds
1.绪论 我们知道redis是由c语言实现的,c语言中是自带字符串的,但是为什么redis还要再实现自己的动态字符串呢,这种动态字符串的底层数据结构是怎样的呢?接下来我们带着这些问题来看一看redis中的动态字符串sds。 2.sds的组成 struct __at…...
路由协议的优先级,以及管理距离 AD 和 metric 的区别
路由协议的优先级(Preference,即管理距离 Administrative Distance )一般为一个 0 到 255 之间的数字,数字越大则优先级越低。表一是通常情况下各路由协议的优先级规定: 表一:一般路由协议优先级 路由协议…...
力扣 24两两交换链表中节点
画图 注意有虚拟头结点 注意判断时先判断cur->next ! nullptr,再判断cur->next->next ! nullptr 注意末尾返回dumyhead->next,用新建result指针来接并返回 class Solution { public:ListNode* swapPairs(ListNode* head) {ListNode *dummyhead new …...
C# + halcon 联合编程示例
C# halcon 联合编程示例 实现功能 1.加载图像 2.画直线,画圆,画矩形, 画椭圆 ROI,可以调整大小和位置 3.实现找边,找圆功能 效果 开发环境 Visual Studio 2022 .NET Framework 4.8 halcondotnet.dll 查看帮助文档 项目结构 DL…...
【Git基本操作】添加文件 | 修改文件 | 及其各场景下.git目录树的变化
目录 1. 添加文件&add操作和commit操作 2. .git树状目录的变化 3. git其他操作 4. 修改文件 4.1 git status 4.2 git diff 1. 添加文件&add操作和commit操作 add操作:将工作区中所有文件的修改内容 添加进版本库的暂存区中。commit操作:…...
Aop切面编程(2)--代理模式
1、代理模式的理解:不修改A对象的代码的基础上,对A代码块进行拓展。通过创建ProxyA代理对象,拓展A对象并调用A对象的核心功能; 即:不修改对象的源码基础上,创建代理对象,进行功能的附加和增强&…...
Spring Boot(八十):Tesseract实现图片文字自动识别
1Tesseract 要实现图片转文字(OCR,Optical Character Recognition)功能,可以使用一些现有的OCR库,比如Google的Tesseract或者百度AI、阿里云OCR等云服务。 下面以Tesseract为例: Tesseract是一个开源文本识别 (OCR)引擎,是目前公认最优秀、最精确的开源OCR系统,用于…...
QT 图片处理
1.qt 图片控件 在Qt中,用于显示图片的控件主要是QLabel。以下是关于Qt图片控件的详细介绍: QLabel控件: QLabel是Qt中用于显示文本或图片的控件。在显示图片时,QLabel通过setPixmap()函数来设置要显示的图片。QPixmap代表Qt中的…...
Linux C++ 053-设计模式之模板方法模式
Linux C 053-设计模式之模板方法模式 本节关键字:Linux、C、设计模式、模板方法模式 相关库函数: 概念 模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新…...
【Python 项目】类鸟群:仿真鸟群
类鸟群:仿真鸟群 仔细观察一群鸟或一群鱼,你会发现,虽然群体由个体生物组成,但该群体作为一个整体似乎有它自己的生命。鸟群中的鸟在移动、飞越和绕过障碍物时,彼此之间相互定位。受到打扰或惊吓时会破坏编队…...
基于信号处理的PPG信号滤波降噪方法(MATLAB)
光电容积脉搏波PPG信号结合相关算法可以用于人体生理参数检测,如血压、血氧饱和度等,但采集过程中极易受到噪声干扰,对于血压、血氧饱和度测量的准确性造成影响。随着当今社会医疗保健技术的发展,可穿戴监测设备对于PPG信号的质量…...
新一代信息技术及应用
关于云计算的描述不正确的是( )。 A 云计算可以通过网络连接,用户通过网络接入“云”中并获得有关的服务,“云”内节点之间也通过内部的网络相连 B 云计算可以快速、按需、弹性服务,用户可以按照实际需求迅速获取或释放…...
SVN 解决冲突
SVN 解决冲突 1. 引言 在软件开发过程中,版本控制是一个至关重要的环节。SVN(Subversion)作为一个流行的版本控制系统,被广泛应用于团队协作中。然而,当多个开发者同时对同一部分代码进行修改时,冲突是不可避免的。本文将详细介绍如何在SVN中解决这些冲突,以便团队成员…...
机器人前沿--PalmE:An Embodied Multimodal Language Model 具身多模态大(语言)模型
首先解释这篇工作名称Palm-E,发表时间为2023.03,其中的Palm是谷歌内部在2022.04开发的大语言模型,功能类似ChatGPT,只是由于各种原因没有那样火起来,E是Embodied的首字母,翻译过来就是具身多模态大语言模型…...
编程语言都是哪些人开发出来的?为什么都是国外较小国家的人
编程语言都是哪些人开发出来的? 编程语言的开发者通常是来自计算机科学、软件工程、数学、物理学等领域的专家、学者和工程师。这些开发者具备深厚的编程技能、算法知识、系统设计能力以及创新思维,他们致力于创造出能够解决特定问题或满足特定需求的编…...
【前端速通系列|第二篇】Vue3前置知识
文章目录 1.前言2.包管理工具npm2.1下载node.js2.2配置 npm 镜像源2.3 npm 常用命令 3.Vite构建工具4.Vue3组件化5.Vue3运行原理 1.前言 本系列文章旨在帮助大家快速上手前端开发。 2.包管理工具npm npm 是 node.js中进行 包管理 的工具. 类似于Java中的Maven。 2.1下载nod…...
火焰不飘、不燃、不爆?,Midjourney 6.6火效失效紧急修复方案(含--no参数黑名单清单与替代性热力图引导法)
更多请点击: https://codechina.net 第一章:火焰不飘、不燃、不爆?——Midjourney 6.6火效失效现象的本质溯源 近期大量用户反馈,在 Midjourney v6.6 中使用 fire、 flame、 blazing 等关键词生成图像时,火焰元素普遍…...
Linux内核启动时,你的isolcpus参数到底经历了什么?从GRUB到CPU掩码的完整旅程
Linux内核启动时,isolcpus参数的奇幻漂流:从GRUB配置到CPU隔离的完整解密当你在GRUB配置文件中写下isolcpus2-3这行看似简单的指令时,可能不会想到这个字符串将经历一场跨越多个软件层的奇妙旅程。本文将带你以侦探视角,追踪这个参…...
AI加速器硬件安全防护技术与实践
1. AI加速器的硬件安全威胁与防护需求在数据中心和边缘计算场景中,AI加速器已成为支撑人工智能工作负载的核心基础设施。这些高性能计算设备通常运行着价值连城的专有算法和训练数据,其物理安全直接关系到企业的核心资产保护。与传统服务器不同ÿ…...
随机计算与ViT硬件加速:混合架构如何突破AI芯片能效墙
1. 项目概述:当ViT遇见随机计算最近在硬件加速领域,一个名为“ASCEND”的项目引起了我的注意。这本质上是一个专门为Vision Transformer(ViT)模型设计的硬件加速器,但其核心创新点在于采用了“随机计算”这种非常规的电…...
诺和新元在华两大重点项目在天津和太仓竣工启用 | 美通社头条
美通社消息:近日,全球领先的生物解决方案合作伙伴诺和新元(Novonesis)分别在天津经济技术开发区(TEDA)与江苏太仓举行重点项目竣工启用活动。诺和新元天津经开区项目竣工启用活动天津新行政办公楼项目是诺和新元在华运营体系的重要升级。本次项目的落成不…...
Windows 10/11 下彻底搞定 TesseractNotFoundError:从下载安装到配置环境变量(含中文包)
Windows 10/11 下彻底搞定 TesseractNotFoundError:从下载安装到配置环境变量(含中文包) 当你第一次尝试在Python项目中使用OCR功能时,那个红色的 TesseractNotFoundError 错误提示可能会让你感到沮丧。别担心,这不是…...
书匠策AI降重降AIGC实测:论文圈的“消音器“到底有多猛?官网www.shujiangce.com深度拆解
各位还在论文泥潭里挣扎的宝子们,今天这期内容可能会让你少熬三个通宵。 我最近收到最多的私信就是:"博主,我查重42%,AIGC检测28%,导师说再改不过就延毕,怎么办?"说实话,…...
银行业务AI虚构小故事合集:借故事理解业务(企业贷款、个人信用卡、反洗钱)
银行业务AI虚构小故事合集 继续用之前讲业务故事的方式来讲银行业务和表的关联,那种方式比较容易听懂。 故事:一家小工厂来借钱 第一幕:企业来了,要借钱 杭州有一家做零件的小工厂,老板叫老张。工厂想买一台新机器&am…...
论文写到一半卡壳了?师兄推荐这几个AI写作辅助软件
写论文最怕的就是卡壳,尤其是当思路混乱、资料繁杂、格式要求又高时,很容易陷入停滞。其实,论文写作的关键不在于苦熬,而在于用对工具、走对流程——不少资深教授都建议学生提前布局,借助 AI 工具提升效率。比如千笔AI…...
顶伯 + 微软 TTS 对比 Edge 浏览器自带 TTS,差距有多大?
付费 vs 免费:顶伯 微软 TTS 对比 Edge 浏览器自带 TTS,差距有多大?在文字转语音领域,微软 TTS 技术一直备受好评,但不同平台的实现方式却带来截然不同的体验。顶伯文字转语音工具深度整合了微软 TTS 引擎,…...
