[python]Markdown图片引用格式批处理桌面应用程序

news2024/11/15 17:28:57

需求

使用python编写一个exe,实现批量修改图片引用,将修改后的文件生成为 文件名_blog.md。有一个编辑框,允许接收拖动过来md文件,拖入文件时获取文件路径,有一个编辑框编辑修改后的文件的输出路径,用户拖入文件时,就能自动得到输出的路径
作用是将md文件中的例如
![image-20240706062921362](./[git]git拯救项目之恢复到之前提交的记录/image-20240706062921362.png)改成{% asset_img image-20240706062921362.png '"..." "文章配图"' %} 
![image-20240706063059015](./[git]git拯救项目之恢复到之前提交的记录/image-20240706063059015.png)改成{% asset_img image-20240706063059015.png '"..." "文章配图"' %}

代码

import os
import re
import wx
from pathlib import Path

"""

使用python编写一个exe,实现批量修改图片引用,将修改后的文件生成为 文件名_blog.md。有一个编辑框,允许接收拖动过来md文件,拖入文件时获取文件路径,有一个编辑框编辑修改后的文件的输出路径,用户拖入文件时,就能自动得到输出的路径
作用是将md文件中的例如
![image-20240706062921362](./[git]git拯救项目之恢复到之前提交的记录/image-20240706062921362.png)改成{% asset_img image-20240706062921362.png '"..." "文章配图"' %} 
![image-20240706063059015](./[git]git拯救项目之恢复到之前提交的记录/image-20240706063059015.png)改成{% asset_img image-20240706063059015.png '"..." "文章配图"' %}

"""


class DropTarget(wx.FileDropTarget):
    def __init__(self, window):
        super().__init__()
        self.window = window

    def OnDropFiles(self, x, y, filenames):
        self.window.set_filenames(filenames)


class MainFrame(wx.Frame):
    def __init__(self, parent, title):
        super().__init__(parent, title=title, size=(600, 400))
        panel = wx.Panel(self)

        self.text_input = wx.TextCtrl(panel, style=wx.TE_MULTILINE | wx.TE_READONLY)
        self.text_output = wx.TextCtrl(panel, style=wx.TE_MULTILINE | wx.TE_READONLY)
        self.btn_convert = wx.Button(panel, label="开始转换")

        vbox = wx.BoxSizer(wx.VERTICAL)
        vbox.Add(self.text_input, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
        vbox.Add(self.text_output, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
        vbox.Add(self.btn_convert, flag=wx.EXPAND | wx.ALL, border=5)

        panel.SetSizer(vbox)

        self.SetDropTarget(DropTarget(self))

        self.Bind(wx.EVT_BUTTON, self.on_convert, self.btn_convert)

        self.Centre()
        self.Show(True)

    def set_filenames(self, filenames):
        self.filenames = filenames
        self.text_input.SetValue('\n'.join(filenames))

    def on_convert(self, event):
        for filename in self.filenames:
            if filename.lower().endswith('.md'):
                input_file_path = Path(filename)
                output_file_path = input_file_path.with_name(input_file_path.stem + '_blog' + input_file_path.suffix)
                self.text_output.AppendText(str(output_file_path) + '\n')
                self.convert_markdown_images(str(input_file_path), str(output_file_path))

    def convert_markdown_images(self, input_file, output_file):
        with open(input_file, 'r', encoding='utf-8') as file:
            content = file.read()

        # 修改正则表达式,以匹配Markdown图片链接
        pattern = r'\!\[(?P<alt_text>.*?)\]\((?P<path>.*/)?(?P<file_name>.*?)(?P<extension>\..*)\)'

        # 遍历所有匹配项并构建新的替换字符串
        new_content = re.sub(pattern, lambda m: f'{{% asset_img {m.group("file_name")}{m.group("extension")} \'"{m.group("alt_text")}" "文章配图"\' %}}', content)

        # 将修改后的内容写入输出文件
        with open(output_file, 'w', encoding='utf-8') as file:
            file.write(new_content)

        wx.MessageBox(f"已成功转换'{input_file}'至'{output_file}'", "转换成功", wx.OK)


if __name__ == '__main__':
    app = wx.App()
    MainFrame(None, title="Markdown 图片链接转换器")
    app.MainLoop()



if __name__ == '__main__':
    app = wx.App()
    MainFrame(None, title="Markdown Image Link Converter@萌狼蓝天(mllt.cc)")
    app.MainLoop()

效果

{% asset_img image-20240706075502201.png '"image-20240706075502201" "文章配图"' %}

image-20240706075502201

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1906965.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

抖音商城自定义小程序源码系统 前后端分离 带完整的源代码包以及搭建教程

系统概述 在当今数字化时代&#xff0c;电商平台的便捷性和个性化体验成为了吸引用户的关键。随着短视频平台的兴起&#xff0c;抖音作为其中的佼佼者&#xff0c;其商城小程序成为了商家连接消费者的新阵地。为了帮助商家快速构建个性化、高效的小程序店铺&#xff0c;本文将…

Java面试题--JVM大厂篇之深入探讨Serial GC的应用场景

目录 引言: 正文: 一、什么是Serial GC&#xff1f; 二、Serial GC的工作原理 三、适用场景 单处理器环境在单处理器环境下&#xff0c;Serial GC是一个非常好的选择。由于没有多余的处理器资源&#xff0c;单线程的垃圾回收操作不会导致额外的上下文切换开销&#xff0c…

springboot非物质文化遗产管理系统-计算机毕业设计源码16087

目录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 删除信息流程 2.3 系统功能…

欧拉系统(openEuler) aarch64虚拟机安装

文章目录 一、操作背景二、资源准备三、文件路径四、安装QEMU五、创建磁盘文件六、安装虚拟机七、连接虚拟机八、启动虚拟机 一、操作背景 客户公司扫描出欧拉系统aarch64架构服务器存在编号 CVE-2024-1086 的内核漏洞&#xff0c;需要对内核升级&#xff0c;首先在个人电脑虚…

硬盘错误0x80071ac3如何修复?5大免费修复法,轻松找回硬盘数据

今天我们要聊的是一个让大家头疼不已的问题——硬盘错误0x80071ac3。你是否也曾经遇到过这个烦人的错误代码&#xff0c;导致数据无法读取、文件丢失&#xff0c;甚至整个硬盘都无法正常使用&#xff1f;别担心今天小编就为大家详细解析这个错误的原因&#xff0c;并分享5个免费…

手机数据恢复:如何在没有root的情况下恢复Android数据?

您是否不小心从Android设备中删除了重要数据&#xff1f;您是否担心如何取回您的照片、视频和文档&#xff1f;有时&#xff0c;我们不小心删除了重要数据&#xff0c;并使用Android root方法取回文件。许多用户不喜欢root他们的Android设备&#xff0c;因为这是一种复杂的方法…

第十一节 动态面板加密解密显示

在原型中我们经常会遇到文件加密与解密显示问题&#xff0c;下面以一个简单案例来说明实现怎么切换明文与密文不同显示方式案例说明&#xff1b; 1、添加动态面板 2、设置加密与不加密 3、添加动作事项 注意为可见时要设置面板状态向前循环&#xff0c;上一项&#xff0c;否则…

【多条件控制生成模型综述】

多条件控制生成 1 分类2 联合训练2.1 Composer2.2 Cocktail2.3 SVDiff 3 持续学习3.1 CLoRA3.2 L2DM3.3 STAMINA 4 权重融合4.1 Cones4.2 Custom Diffusion/Mix-of-Show4.3 ZipLoRA4.4 style LoRAs 5 基于注意力的集成方法5.1 Cones25.2 Mix-of-Show 6 指导组合6.1 Decompose a…

众所周知沃尔玛1P是怎么运营?

​​沃尔玛的1P模式&#xff0c;即第一方供应商模式&#xff0c;是其独特的采购策略。在这种模式下&#xff0c;供应商先将商品卖给沃尔玛&#xff0c;由沃尔玛负责库存管理和销售。沃尔玛通过强大的采购和物流能力控制库存&#xff0c;确保商品品质&#xff0c;为客户提供更加…

STM32入门笔记(03): ADC低通滤波(IIR)(SPL库函数版)(2)

A/D转换的常用技术有逐次逼近式、双积分式、并行式和跟踪比较式等。目前用的较多的是前3种。 A/D转换器的主要技术指标 转换时间 分辨率 例如&#xff0c;8位A/D转换器的数字输出量的变化范围为0&#xff5e;255&#xff0c;当输入电压的满刻度为5V时&#xff0c;数字量每变化…

Android的校园二手交易app-计算机毕业设计源码46291

摘要 在大学校园中&#xff0c;学生们的物品更换频繁&#xff0c;有许多闲置物品堆积。对于这些物品&#xff0c;许多学生希望能够有一个平台来方便地交易。随着移动互联网的普及&#xff0c;移动应用已成为校园生活的重要组成部分。其中&#xff0c;校园二手交易平台能够有效地…

(2024,稀疏 MoE,大量小专家,参数高效专家检索 PEER,product key 检索)混合百万专家

Mixture of A Million Experts 公和众与号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 1. 简介 2. 方法 3. 实验 0. 摘要 标准 Transformer 架构中的前馈&#xff08;feedforward&a…

绝区肆--2024 年AI安全状况

前言 随着人工智能系统变得越来越强大和普及&#xff0c;与之相关的安全问题也越来越多。让我们来看看 2024 年人工智能安全的现状——评估威胁、分析漏洞、审查有前景的防御策略&#xff0c;并推测这一关键领域的未来可能如何。 主要的人工智能安全威胁 人工智能系统和应用程…

C++入门基础_cpp

目录 1.C发展历史 2.C版本更新 3. C参考⽂档 4.C的第⼀个程序 5.命名空间(namespace) 5.1 namespace的价值 5.2 namespace的定义 5.3 命名空间使用 6.C输⼊&输出 7. 缺省参数 8.函数重载 9. 引用 9.1 引用的概念和特性 9.2 const引用 9.3 引用与指针的关系 …

学诚教育在线管理系统-计算机毕业设计源码98076

目 录 摘要 1 绪论 1.1 选题背景与意义 1.2开发现状 1.3论文结构与章节安排 2 开发环境及相关技术介绍 2.1 MySQL数据库 2.2 Tomcat服务器 2.3 Java语言 2.4 Spring Cloud框架介绍 3 教育在线管理系统系统分析 3.1 可行性分析 3.1.1 技术可行性分析 3.1.2 经济可…

如何确保工业展厅设计既专业又吸引?三原则详解!

工业是民族发展的基石&#xff0c;它为我们带来了无数的便利和进步&#xff0c;而为了让更多人了解这个至关重要的产业&#xff0c;以及其背后的技术和产品&#xff0c;许多工业性质的企业都致力于通过互动投影、虚拟现实、全息投影等多媒体技术&#xff0c;来打造独具特色的工…

AI视频生成,文字、图片、人像生成视频小程序开发

AI视频生成&#xff0c;文字、图片、人像生成视频小程序开发 AI驱动的多媒体内容创新平台&#xff1a;从文本至视频的一站式生成解决方案。 以下概述集成AI技术的原创视频生成小程序的高级功能框架&#xff0c;旨在为用户提供极致的创作体验。 文本视频化引擎&#xff1a;允…

web端已有项目集成含UI腾讯IM

通过 npm 方式下载 TUIKit 组件,将 TUIKit 组件复制到自己工程的 src 目录下: npm i @tencentcloud/chat-uikit-vue mkdir -p ./src/TUIKit && rsync -av --exclude={node_modules,package.json,excluded-list.txt} ./node_modules/@tencentcloud/chat-uikit-vue/ .…

学数据结构学的很慢,毫无头绪怎么办 ?

这个情况比较正常诶&#xff0c;不用有太大的心理压力。 然后程序设计那个没有学过&#xff0c;而数据结构的前置课程之一就是程序设计&#xff0c;比如栈/队列/树&#xff0c;这些数据结构都要基于代码实现的。我估计是因为你之前缺少学习程序设计的经验&#xff0c;所以学起…