首页 > 编程语言 >[python]Markdown图片引用格式批处理桌面应用程序

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

时间:2024-07-06 10:41:23浏览次数:10  
标签:__ Markdown python self 批处理 file input image wx

需求

使用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

标签:__,Markdown,python,self,批处理,file,input,image,wx
From: https://www.cnblogs.com/mllt/p/18286985

相关文章

  • python:如何防止隔壁老王破你的WIFI?
    Python与网络安全:最佳拍档Python凭借其简洁的语法和丰富的库支持,成为进行网络安全测试和加固的理想选择。下面,我们将深入几个实用场景,看看Python如何帮助我们成为自家网络安全的守护者。1.网络监控:Scapy的妙用Scapy是一个能让网络封包操作变得轻而易举的库。利用......
  • [python]邮件发送注意事项
    邮件格式关于发信,需要遵循国际发信协议要求[4],例如RFC5322协议,避免因为格式不合法,导致被收信服务器拒收。在二零二三年以前,在开发Python的邮箱发信接口时,对邮箱格式要求不高,主要还算因为发信协议的不够完善,因此之前发信接口的开发比较随意,但随着近年来的发展,电子邮件的广泛应用,......
  • 运用Python与Keras框架打造深度学习图像分类应用:详尽步骤与代码实例解析
    引言随着深度学习技术的飞速发展,其在图像识别和分类领域的应用日益广泛。在这一背景下,Python因其丰富的数据科学库和强大的生态系统而成为首选编程语言之一。在本文中,我们将深入探讨如何使用Python和其中的Keras深度学习框架来完成一个实际的图像分类任务。我们将通过详细的代......
  • [python]Markdown图片引用格式批处理桌面应用程序
    需求使用python编写一个exe,实现批量修改图片引用,将修改后的文件生成为文件名_blog.md。有一个编辑框,允许接收拖动过来md文件,拖入文件时获取文件路径,有一个编辑框编辑修改后的文件的输出路径,用户拖入文件时,就能自动得到输出的路径作用是将md文件中的例如![image-20240706062921......
  • python随笔day01
    python随笔day011.不使用中间变量,交换两个变量的值?#方法一:a=10b=20print(f"a={a},b={b}")a,b=b,aprint(f"a={a},b={b}")#方法二:相加减a=10b=20print(f"a={a},b={b}")a=a+bb=a-ba=a-bprint(f"a={a},b={b}")#方......
  • Python在网络爬虫和数据抓取中的应用
    Python在网络爬虫和数据抓取中的应用引言在数字化时代,数据的价值日益凸显。无论是市场趋势分析,还是个人偏好预测,数据都扮演着至关重要的角色。Python,作为一种功能强大、语法简洁的编程语言,为数据的获取、处理和分析提供了一整套解决方案。本文将带您深入了解Python在网络......
  • python笔记day01
    python随笔day011.不使用中间变量,交换两个变量的值?#方法一:a=10b=20print(f"a={a},b={b}")a,b=b,aprint(f"a={a},b={b}")#方法二:相加减a=10b=20print(f"a={a},b={b}")a=a+bb=a-ba=a-bprint(f"a={a},b={b}")#方......
  • ChatGPT对话:Python程序自动模拟操作网页,无法弹出下拉列表框
    【编者按】需要编写Python程序自动模拟操作网页。编者有编程经验,但没有前端编程经验,完全不知道如何编写这种程序。通过与ChatGPT讨论,1天完成了任务。因为没有这类程序的编程经验,需要边学习,边编程,遇到问题再网上查资料。如果没有ChatGPT,估计至少需要5天时间。从登录开始模拟......
  • python批量修改文件后缀名
    python批量修改文件后缀名 importosimportglobdefbatch_rename_files(source_dir,old_extension,new_extension):#确保新的文件名不会与现有文件冲突defget_new_name(file_path,new_extension):base_name=os.path.splitext(file_path)[0]......
  • 使用Python和scikit-learn实现支持向量机(SVM)
            支持向量机(SupportVectorMachine,SVM)是一种强大的监督学习算法,广泛用于分类和回归问题。它能够有效处理线性和非线性数据,并在复杂数据集中表现出色。本文将介绍如何使用Python和scikit-learn库实现SVM,以及如何通过可视化不同参数设置来理解其工作原理。一、......