[python]Markdown圖片引用格式批處理桌面應用程序

需求

使用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 = windowdef 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 = filenamesself.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.pswp.cn/web/41883.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41883.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41883.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Springboot實戰:AI大模型+亮數據代理助力短視頻時代

目錄 前言1.如何入門亮數據1.1、注冊登錄1.2、注冊賬號1.3、登錄1.4、購買靜態住宅代理1.5、展示購買的代理 2. 使用Springboot、AI大模型構建系統2.1 使用Springboot、AI大模型構建爬蟲2.2、在Springboot項目添加工具 3、編寫代碼&#xff0c;爬取視頻素材3.1、代碼里使用代理…

Redis核心問題總結(一)

1、為什么要使用Redis做緩存 緩存的好處 使用緩存的目的就是提升讀寫性能。而實際業務場景下&#xff0c;更多的是為了提升讀性能&#xff0c;帶來更好的性 能&#xff0c;帶來更高的并發量。Redis 的讀寫性能比 Mysql 好的多&#xff0c;我們就可以把 Mysql 中的熱點數據緩 …

如何編譯ffmpeg支持h265(hevc)?

推薦使用這里的文件&#xff1a;https://github.com/runner365/ffmpeg_rtmp_h265 根據你ffmpeg的源碼 版本&#xff0c;切換到不同分支即可。 國內cdn方式: 新增codecid hevc/vp8/vp9/opus在rtmp中的codecid沒有官方協議定義&#xff0c;由國內眾多知名cdn共同制定。 FLV_COD…

1. LangChain4j 之入門(簡單易學)

一&#xff1a;前言 什么是LangChain&#xff1f;而LangChain4j又是什么&#xff1f;不知道的朋友&#xff0c;可以看我一下兩篇文章 1分鐘了解LangChain是什么? | 1分鐘了解LangChain4j是什么? LangChain4j是LangChain的Java版本&#xff0c;幫助開發者很容易的接入大模型的…

提升結構安全性:應變計在現代建筑中的應用

在現代建筑領域&#xff0c;隨著工程技術的不斷進步&#xff0c;對結構安全性的要求也日益提高。作為一種關鍵的工程儀器儀表&#xff0c;應變計在提升結構安全性方面發揮著不可替代的作用。本文將深入探討應變計在現代建筑中的應用&#xff0c;以及它如何助力工程師們實時監測…

權力之望怎么注冊賬號創建角色 權利之網角色賬號注冊教程

權力之望是一款全新的大型MMORPG游戲&#xff0c;擁有9把獨特武器和56種職業組合&#xff0c;并搭配了超炫酷的戰斗畫面&#xff0c;全程采用低俯視角游戲&#xff0c;讓玩家能體驗到更強的操作感和爽快感。這款游戲主打高養成自由度玩家可以自由更換武器進行戰斗&#xff0c;還…

前端面試題30(閉包和作用域鏈的關系)

閉包和作用域鏈在JavaScript中是緊密相關的兩個概念&#xff0c;理解它們之間的關系對于深入掌握JavaScript的執行機制至關重要。 作用域鏈 作用域鏈是一個鏈接列表&#xff0c;它包含了當前執行上下文的所有父級執行上下文的變量對象。每當函數被調用時&#xff0c;JavaScri…

零基礎也能成為產品冊設計高手

?在當今數字化時代&#xff0c;產品冊設計已成為企業營銷的重要手段之一。過去&#xff0c;人們認為只有專業人士才能設計出精美的產品冊&#xff0c;然而&#xff0c;隨著設計工具的普及和在線學習資源的豐富&#xff0c;零基礎的你也能成為產品冊設計高手。本文將帶你走進這…

MindsDB:一個利用企業數據構建 AI 的平臺

MindsDB作為一個開源項目&#xff0c;它旨在將機器學習模型無縫集成到現有的數據庫系統中&#xff0c;為用戶提供實時的數據預測能力。這個項目的創新之處在于&#xff0c;它能夠以簡單、直觀的方式讓開發者和非技術人員都能夠利用AI進行數據分析和預測。 它是根據企業數據庫定…

航空航天單位保密網文件導出管理難點在哪里?如何解決?

航空航天單位的重要性不言而喻&#xff0c;它們在國家安全、科技進步、經濟發展以及國際合作等多個領域都扮演著至關重要的角色。為了保護工作內容中的重要數據&#xff0c;遵守保密規定&#xff0c;對涉密人員、保密要害部門單位、涉密載體、涉密信息傳輸和涉密活動進行嚴格管…

glide加載mp4 源碼堆棧調用核心代碼分析

load 數據走的httpurlfetcher 的loaddata 從MultiLoader 調用而來 load到inputstream流后的處理 核心 圖片是glide 首先創建解釋器的時候 加了videodecoder 然后這里會從流中加載對應幀的圖片保存在手機cache目錄中 將這個file 作為bitmap傳遞 然后加載 private static final…

MySQL物理備份與恢復工具XtraBackend使用總結

文章目錄 1.描述2.安裝3.使用3.1 備份源數據庫3.2 恢復到目標數據庫3.2.1 恢復目錄3.2.2 解壓文件3.2.3 應用日志3.2.4 復制數據 4.使用總結4.1 備份4.2 恢復4.3 例子 1.描述 借助Percona XtraBackup工具實現MySQL的物理備份與恢復&#xff0c;相當于將整個MySQL進行了復制&am…

Django+vue自動化測試平臺(25)-- 自動化測試之封裝APscheduler定時任務框架

APscheduler簡介 APscheduler全稱Advanced Python Scheduler&#xff0c;作用為在指定的時間規則執行指定的作業&#xff0c;其是基于Quartz的一個Python定時任務框架&#xff0c;實現了Quartz的所有功能&#xff0c;使用起來十分方便。提供了基于日期、固定時間間隔以及cront…

2.5 C#視覺程序開發實例1----CamManager實現模擬相機采集圖片

2.5 C#視覺程序開發實例1----CamManager實現模擬相機采集圖片 1 目標效果視頻 CamManager 2 CamManager讀取本地文件時序 3 BD_Vision_Utility添加代碼 3.0 導入鏈接庫 BD_OperatorSets.dllSystem.Windows.Forms.dllOpencvSharp 3.1 導入VisionParam中創建的文件Util_FileO…

安防監控/視頻匯聚平臺EasyCVR設備錄像回看請求播放時間和實際時間對不上,是什么原因?

安防監控EasyCVR視頻匯聚平臺可提供多協議&#xff08;RTSP/RTMP/國標GB28181/GAT1400/海康Ehome/大華/海康/宇視等SDK&#xff09;的設備接入、音視頻采集、視頻轉碼、處理、分發等服務&#xff0c;系統具備實時監控、云端錄像、回看、告警、平臺級聯以及多視頻流格式分發等視…

旅游計劃定制小程序網頁模板源碼

手機在線旅游定制服務&#xff0c;定制旅游出行app小程序模板。包含&#xff1a;定制介紹、定制表單填寫、我的訂單等。 旅游計劃定制小程序網頁模板源碼

C++ STL 文件系統用法介紹

目錄 一. 獲取當前工作目錄 二:設置和讀取文件寫入時間 三:獲取文件目錄大小 四:獲取文件類型信息 一. 獲取當前工作目錄 #include <filesystem> #include <iostream> #include <fstream> namespace fs = std::filesystem;int main() {std::cout &l…

交換機接口三種模式Access、Trunk、Hybrid

交換機接口的三種模式 1.access接口模式&#xff08;接入鏈路&#xff0c;接入模式&#xff09; 接收數據&#xff1a;當接收到一個無標記幀的時候&#xff0c;打上自己的PVid并接受&#xff08;就是自己的vlan標簽&#xff09;。當接收到一個有標記幀的時候&#xff0c;對比…

swiftui中NavigationStack布局navigationBarTitleDisplayMode作用,以及內容頂部空白區域解決辦法

寫了一個小demo用于學習NavigationStack和toolbar/ToolbarItem知識&#xff0c;但是在寫一個瀑布流布局的時候&#xff0c;設置了頂部的toolbar&#xff0c;然后內容區域的頂部出現了一大片空白區域&#xff0c;這樣的效果并不是很美觀很好看&#xff0c;所以就想著研究解決一下…

科普文:一文搞懂SpringBoot(狂神說Java)

1、Hello,World&#xff01; 1.1、SpringBoot簡介 回顧什么是Spring Spring是一個開源框架&#xff0c;2003 年興起的一個輕量級的Java 開發框架&#xff0c;作者&#xff1a;Rod Johnson 。 Spring是為了解決企業級應用開發的復雜性而創建的&#xff0c;簡化開發。 Spring是…