[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 ...
随机推荐
- Redis 发布订阅模式
概述 Redis 的发布/订阅是一种消息通信模式:发送者(Pub)向频道(Channel)发送消息,订阅者(Sub)接收频道上的消息.Redis 客户端可以订阅任意数量的频道,发送者也可以向任意频道发 ...
- 默认nginx.conf
user nginx; worker_processes auto; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid ...
- keycloak~token有效期与session有效期
一 refresh_token刷新access_token Keycloak会话管理中,获取到accessToken和refreshToken后,基于accessToken交换用户数据或者参与Keyc ...
- 服务器开启FTP
服务器开启 FTP 操作系统:Windows 服务器镜像:Windows Server 2022 数据中心版(简体中文)64 位 一.新建用户以及文件夹 步骤 1:新建用户 打开计算机管理. 打开&q ...
- Centos7安装部署prometheus
普罗米修斯的主要特点是: 具有由度量名称和键/值对标识的时间序列数据的多维数据模型 PromQL,一种灵活的查询语言, 可以利用这一维度 不依赖分布式存储; 单个服务器节点是自治的 时间序列集合通过H ...
- RAC:无训练持续扩展,基于检索的目标检测器 | ECCV'24
来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: Online Learning via Memory: Retrieval-Augmented Detector Adaptation 论文地 ...
- MMdetection 问题报错 mmdet/evaluation/metrics/coco_metric.py data[‘category_id’] = self.cat_ids[label] IndexError: list index out of range
方案一:有人说 在自己定义的 conifg文件中增加 metainfo = { 'classes': ('class1','class2', 'class2',), 'palette': [ (220 ...
- 简单但实用,RTC时钟使用指南
合宙Air201快速入门-RTC实时时钟使用示例- 本教程教你通过使用脚本代码,实现Air201内置RTC实时时钟同步时间.获取时间.设置时间等功能,可根据实际需求灵活应用. 我们先了解一些相关基础知 ...
- AT cf17 final J Tree MST
AT cf17 final J Tree MST 考场上想出的黑题,然而写挂了-- 思路 考场推出 boruvka 算法,会的直接跳过就好. 结论:一个点向另外一个点连出的最小边,一定在最小生成树上. ...
- php使用汉字作为进制转换
突然想到英文字符26个,大小写共52个,数字10个,加起来也不过62,再算上特殊字符,也就90个,可以看这篇文章 那可不可以扩大这个进制呢?我想到了汉字. 中文汉字,博大精深,我们就用常用汉字2500 ...