需求
使用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 = 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" "文章配圖"' %}