[python]Markdown图片引用格式批处理桌面应用程序
需求
使用python编写一个exe,实现批量修改图片引用,将修改后的文件生成为 文件名_blog.md。有一个编辑框,允许接收拖动过来md文件,拖入文件时获取文件路径,有一个编辑框编辑修改后的文件的输出路径,用户拖入文件时,就能自动得到输出的路径
作用是将md文件中的例如
改成{% asset_img image-20240706062921362.png '"..." "文章配图"' %}
改成{% asset_img image-20240706063059015.png '"..." "文章配图"' %}
代码
import os
import re
import wx
from pathlib import Path
"""
使用python编写一个exe,实现批量修改图片引用,将修改后的文件生成为 文件名_blog.md。有一个编辑框,允许接收拖动过来md文件,拖入文件时获取文件路径,有一个编辑框编辑修改后的文件的输出路径,用户拖入文件时,就能自动得到输出的路径
作用是将md文件中的例如
改成{% asset_img image-20240706062921362.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" "文章配图"' %}

[python]Markdown图片引用格式批处理桌面应用程序的更多相关文章
- Python读取图片尺寸、图片格式
Python读取图片尺寸.图片格式 需要用到PIL模块,使用pip安装Pillow.Pillow是从PIL fork过来的Python 图片库. from PIL import Image im = ...
- Markdown 图片助手-MarkdownPicPicker
title: Markdown 图片助手 v0.1 toc: true comments: true date: 2016-06-04 16:40:06 tags: [Python, Markdown ...
- python智能图片识别系统(图片切割、图片识别、区别标识)
@ 目录 技术介绍 运行效果 关键代码 写在最后 技术介绍 你好! python flask图片识别系统使用到的技术有:图片背景切割.图片格式转换(pdf转png).图片模板匹配.图片区别标识. 运行 ...
- 在word里插入图片,并设置图片的格式
由于公司业务需要,需要在生成的word里插入图片(公司印章),仔细想了下,还是在word模板里添加一个书签,然后再该书签的位置插入图片,并设置图片的格式方便些: 代码如下: using System; ...
- markdown图片转换demo
markdown图片转换demo 一直以来都是用Markdown来写博客的,但是它的图片嵌入实在是太让人头秃,逼得我能找网上的图片就不用自己的,实在是麻烦.所以我在发现了一个可以生成markdown样 ...
- Python批量图片识别并翻译——我用python给女朋友翻译化妆品标签
Python批量图片识别并翻译--我用python给女朋友翻译化妆品标签 最近小编遇到一个生存问题,女朋友让我给她翻译英文化妆品标签.美其名曰:"程序猿每天英语开发,英文一定很好吧,来帮我翻 ...
- Python OpenCV图片转视频 工具贴(三)
Python OpenCV图片转视频 粘贴即用,注意使用时最好把自己的文件按照数字顺序命名.按照引导输入操作. # 一键傻瓜式引导图片串成视频 # 注意使用前最好把文件命名为数字顺序格式 import ...
- 石火电光追风逐日|前端优化之次时代图片压缩格式WebP的项目级躬身实践(Python3 PIL+Nginx)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_190 我们知道,在前端界有一个共识:速度就是生命,带宽就是金钱.怎样将页面加载速度有效提升是无数前端工程师无时不刻在思考的课题,目 ...
- Python的模块引用和查找路径
模块间相互独立相互引用是任何一种编程语言的基础能力.对于“模块”这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译型的语言,比如C#中 ...
- 引用64位dll时候出现 未能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项。试图加载格式不正确的程序。
引用64位dll时候出现 未能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项.试图加载格式不正确的程序. 需要在web.config增加配置 <startup use ...
随机推荐
- python:批量删除指定文件目录中多个文件
#coding:utf-8# 任务需要,需要删除多余的文件,手动删除太麻烦,几行python搞定 import os from glob import glob path = r"/medi ...
- 数据库故障处理优质文章汇总(含Oracle、MySQL、MogDB等)
数据库告警.紧急问题处理这些项目对于大多数朋友来讲应该不陌生了.从墨天轮社区整理的"最受DBA欢迎的技术文档合辑"系列中可以发现,大家对"故障诊断专题"的热情居 ...
- kotlin更多语言结构——>异常
异常类 Kotlin 中所有异常类都是 Throwable 类的子孙类.每个异常都有消息.堆栈回溯信息以及可选的原因 使用 throw-表达式来抛出异常 throw Exception("H ...
- Android复习(一)基础知识
1. 现在可以使用 Kotlin.Java 和 C++ 语言编写 Android 应用 2.Android四大组件依然坚挺,这是基础并且没有改变的迹象 Activity 服务 广播接收器 内容提供程序 ...
- 使用Pydantic和SqlAlchemy实现树形列表数据(自引用表关系)的处理,以及递归方式处理数据差异
在我的设计框架业务中,字典大类.部门机构.系统菜单等这些表,都存在id.pid的字段,主要是作为自引用关系,实现树形列表数据的处理的,因为这样可以实现无限层级的树形列表.在实际使用Pydantic和S ...
- JavaScript网页设计案例
1.引言 在前端开发中,JavaScript 无疑是一个非常重要的语言.它不仅可以用于表单验证.动态内容更新,还能实现复杂的交互效果和动画.通过 JavaScript,网页变得更加生动和富有互动性.本 ...
- HTTP常用返回结果状态码
摘编自<图解HTTP> HTTP状态码负责表示客户端 HTTP请求的返回结果.标记服务器端的处理是否正常.通知出现的错误等工作.状态码的职责是当客户端向服务器端发送请求时,描述返回的请求 ...
- HTML常见的文本语义标签
列举HTML里一些常用的块内语义元素.可以通过F12来查看每个示例. <strong>:即"重点内容",通常是加粗,对应Markdown中的**加粗. 示例:归约数往往 ...
- Taylor series Explicit Euler Implicit Euler
1 Taylor series \[\begin{gathered}\sum_{n=0}^{\infty}\frac{f^{(n)}\left(a\right)}{n!}\left(x-a\right ...
- manim边学边做--极坐标平面
PolarPlane,顾名思义,是用于创建极坐标平面的类. 与笛卡尔坐标系不同,极坐标系是基于角度和半径来定位点的,这里的每个点由一个角度和距离原点的距离表示. 在Manim中,PolarPlane通 ...