欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Python開發(fā)Markdown表格結(jié)構(gòu)轉(zhuǎn)換為Excel工具

 更新時間:2025年03月27日 15:37:08   作者:winfredzhang  
在數(shù)據(jù)管理和文檔編寫過程中,我們經(jīng)常使用 Markdown 來記錄表格數(shù)據(jù),但它沒有Excel使用方便,所以本文將使用Python編寫一個轉(zhuǎn)換工具,希望對大家有所幫助

在數(shù)據(jù)管理和文檔編寫過程中,我們經(jīng)常使用 Markdown 來記錄表格數(shù)據(jù)。然而,Markdown 格式的表格在實(shí)際應(yīng)用中不如 Excel 方便,特別是需要進(jìn)一步處理數(shù)據(jù)時。因此,我們開發(fā)了一個使用 wxPython 的 GUI 工具,將 Markdown 表格結(jié)構(gòu)轉(zhuǎn)換為 Excel 文件。

1.完整代碼

import wx
import re
import openpyxl
import logging

class MarkdownToExcelApp(wx.Frame):
    def __init__(self):
        super().__init__(parent=None, title='Markdown 轉(zhuǎn) Excel', size=(800, 600))
        
        # 配置日志
        logging.basicConfig(level=logging.DEBUG, 
                            format='%(asctime)s - %(levelname)s - %(message)s',
                            filename='markdown_to_excel_debug.log',
                            filemode='w')
        
        # 創(chuàng)建面板
        panel = wx.Panel(self)
        
        # 創(chuàng)建垂直布局
        main_sizer = wx.BoxSizer(wx.VERTICAL)
        
        # 輸入標(biāo)簽
        input_label = wx.StaticText(panel, label='請輸入Markdown表格結(jié)構(gòu):')
        main_sizer.Add(input_label, 0, wx.ALL | wx.EXPAND, 10)
        
        # 輸入文本框
        self.input_text = wx.TextCtrl(panel, style=wx.TE_MULTILINE)
        main_sizer.Add(self.input_text, 1, wx.ALL | wx.EXPAND, 10)
        
        # 轉(zhuǎn)換按鈕
        convert_btn = wx.Button(panel, label='轉(zhuǎn)換為Excel')
        convert_btn.Bind(wx.EVT_BUTTON, self.on_convert)
        main_sizer.Add(convert_btn, 0, wx.ALL | wx.CENTER, 10)
        
        # 日志文本框
        self.log_text = wx.TextCtrl(panel, style=wx.TE_MULTILINE | wx.TE_READONLY)
        main_sizer.Add(self.log_text, 1, wx.ALL | wx.EXPAND, 10)
        
        # 設(shè)置面板的布局
        panel.SetSizer(main_sizer)
        
        # 創(chuàng)建菜單欄
        menubar = wx.MenuBar()
        file_menu = wx.Menu()
        exit_item = file_menu.Append(wx.ID_EXIT, '退出', '退出應(yīng)用程序')
        menubar.Append(file_menu, '文件')
        self.SetMenuBar(menubar)
        
        # 綁定菜單事件
        self.Bind(wx.EVT_MENU, self.on_exit, exit_item)
        
        # 居中顯示
        self.Centre()
    
    def log_and_display(self, message):
        """記錄日志并在界面顯示"""
        logging.debug(message)
        self.log_text.AppendText(message + '\n')
    
    def parse_markdown_structure(self, markdown_text):
        """解析Markdown表格結(jié)構(gòu)"""
        self.log_and_display("開始解析Markdown表格結(jié)構(gòu)")
        
        # 存儲表格信息的字典
        table_structure = {}
        
        # 按表格分割
        table_blocks = markdown_text.split('* **')
        
        for block in table_blocks[1:]:  # 跳過第一個空元素
            # 分割表格名稱和字段
            lines = block.split('\n')
            table_name = lines[0].strip()
            
            # 提取字段
            fields = []
            for line in lines[1:]:
                line = line.strip()
                if line.startswith('* '):
                    # 移除 '* ' 前綴
                    fields.append(line[2:].strip())
            
            self.log_and_display(f"表格: {table_name}")
            self.log_and_display(f"字段: {fields}")
            
            # 存儲表格結(jié)構(gòu)
            table_structure[table_name] = fields
        
        self.log_and_display(f"解析完成,總表格數(shù): {len(table_structure)}")
        return table_structure
    
    def on_convert(self, event):
        """轉(zhuǎn)換Markdown結(jié)構(gòu)到Excel"""
        # 清空之前的日志
        self.log_text.Clear()
        
        markdown_text = self.input_text.GetValue()
        
        if not markdown_text.strip():
            wx.MessageBox('請輸入Markdown表格結(jié)構(gòu)', '錯誤', wx.OK | wx.ICON_ERROR)
            return
        
        try:
            # 解析Markdown結(jié)構(gòu)
            table_structure = self.parse_markdown_structure(markdown_text)
            
            # 創(chuàng)建工作簿
            wb = openpyxl.Workbook()
            
            # 為每個表格創(chuàng)建sheet
            first_sheet = True
            for table_name, fields in table_structure.items():
                self.log_and_display(f"創(chuàng)建sheet: {table_name}")
                
                if first_sheet:
                    # 重命名第一個sheet
                    ws = wb.active
                    ws.title = table_name.split(' ')[0][:31]  # Excel sheet名稱長度限制
                    first_sheet = False
                else:
                    ws = wb.create_sheet(title=table_name.split(' ')[0][:31])
                
                # 寫入表頭
                for col, field in enumerate(fields, start=1):
                    ws.cell(row=1, column=col, value=field)
                
                # 添加一個示例行(可選)
                for col, field in enumerate(fields, start=1):
                    ws.cell(row=2, column=col, value=f"示例{field}")
            
            # 保存文件
            save_dialog = wx.FileDialog(
                self, 
                "保存Excel文件", 
                wildcard="Excel文件 (*.xlsx)|*.xlsx", 
                style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT
            )
            
            if save_dialog.ShowModal() == wx.ID_OK:
                filename = save_dialog.GetPath()
                wb.save(filename)
                self.log_and_display(f'Excel文件已保存:{filename}')
                wx.MessageBox(f'Excel文件已保存:{filename}', '成功', wx.OK | wx.ICON_INFORMATION)
            
            save_dialog.Destroy()
        
        except Exception as e:
            error_msg = f'轉(zhuǎn)換出錯:{str(e)}'
            self.log_and_display(error_msg)
            wx.MessageBox(error_msg, '錯誤', wx.OK | wx.ICON_ERROR)
    
    def on_exit(self, event):
        """退出應(yīng)用程序"""
        self.Close(True)

def main():
    app = wx.App()
    frame = MarkdownToExcelApp()
    frame.Show()
    app.MainLoop()

if __name__ == '__main__':
    main()

2. 項(xiàng)目概述

本項(xiàng)目提供一個圖形界面,用戶可以輸入 Markdown 格式的表格結(jié)構(gòu),程序解析后生成 Excel 文件。該應(yīng)用具備以下功能:

  • 支持 Markdown 格式的表格結(jié)構(gòu)解析。
  • 生成 Excel 文件,每個表格對應(yīng)一個工作表。
  • 記錄日志,方便調(diào)試。
  • 提供 GUI 界面,用戶體驗(yàn)友好。

3. 代碼解析

3.1 依賴庫

import wx
import re
import openpyxl
import logging

wx 用于創(chuàng)建 GUI 界面。

re 用于正則表達(dá)式解析 Markdown 表格。

openpyxl 用于創(chuàng)建 Excel 文件。

logging 記錄調(diào)試信息。

3.2 GUI 設(shè)計(jì)

class MarkdownToExcelApp(wx.Frame):
    def __init__(self):
        super().__init__(parent=None, title='Markdown 轉(zhuǎn) Excel', size=(800, 600))

wx.Frame 創(chuàng)建主窗口,標(biāo)題為“Markdown 轉(zhuǎn) Excel”。

設(shè)置窗口大小為 800x600。

# 配置日志
logging.basicConfig(level=logging.DEBUG, 
                    format='%(asctime)s - %(levelname)s - %(message)s',
                    filename='markdown_to_excel_debug.log',
                    filemode='w')

記錄日志到 markdown_to_excel_debug.log,用于調(diào)試。

# 創(chuàng)建面板
panel = wx.Panel(self)
# 創(chuàng)建垂直布局
main_sizer = wx.BoxSizer(wx.VERTICAL)

wx.Panel 是 GUI 的容器。

wx.BoxSizer(wx.VERTICAL) 采用垂直布局管理組件。

3.3 解析 Markdown 結(jié)構(gòu)

def parse_markdown_structure(self, markdown_text):
    self.log_and_display("開始解析Markdown表格結(jié)構(gòu)")
    table_structure = {}
    table_blocks = markdown_text.split('* **')
    for block in table_blocks[1:]:
        lines = block.split('\n')
        table_name = lines[0].strip()
        fields = [line[2:].strip() for line in lines[1:] if line.startswith('* ')]
        self.log_and_display(f"表格: {table_name}")
        self.log_and_display(f"字段: {fields}")
        table_structure[table_name] = fields
    self.log_and_display(f"解析完成,總表格數(shù): {len(table_structure)}")
    return table_structure

split('* **') 將 Markdown 文本按表格名稱分割。

逐行解析字段。

記錄日志信息。

3.4 生成 Excel

def on_convert(self, event):
    markdown_text = self.input_text.GetValue()
    if not markdown_text.strip():
        wx.MessageBox('請輸入Markdown表格結(jié)構(gòu)', '錯誤', wx.OK | wx.ICON_ERROR)
        return
    try:
        table_structure = self.parse_markdown_structure(markdown_text)
        wb = openpyxl.Workbook()
        first_sheet = True
        for table_name, fields in table_structure.items():
            ws = wb.active if first_sheet else wb.create_sheet(title=table_name.split(' ')[0][:31])
            first_sheet = False
            for col, field in enumerate(fields, start=1):
                ws.cell(row=1, column=col, value=field)
                ws.cell(row=2, column=col, value=f"示例{field}")
        save_dialog = wx.FileDialog(self, "保存Excel文件", wildcard="Excel文件 (*.xlsx)|*.xlsx", style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
        if save_dialog.ShowModal() == wx.ID_OK:
            filename = save_dialog.GetPath()
            wb.save(filename)
            self.log_and_display(f'Excel文件已保存:{filename}')
            wx.MessageBox(f'Excel文件已保存:{filename}', '成功', wx.OK | wx.ICON_INFORMATION)
    except Exception as e:
        self.log_and_display(f'轉(zhuǎn)換出錯:{str(e)}')
        wx.MessageBox(f'轉(zhuǎn)換出錯:{str(e)}', '錯誤', wx.OK | wx.ICON_ERROR)

openpyxl.Workbook() 創(chuàng)建 Excel 文件。

create_sheet() 創(chuàng)建多個表格,每個表格對應(yīng)一個工作表。

wx.FileDialog 讓用戶選擇文件保存路徑。

logging 記錄轉(zhuǎn)換過程。

3.5 退出應(yīng)用

def on_exit(self, event):
    self.Close(True)

關(guān)閉應(yīng)用。

4. 運(yùn)行程序

def main():
    app = wx.App()
    frame = MarkdownToExcelApp()
    frame.Show()
    app.MainLoop()

if __name__ == '__main__':
    main()

啟動 wxPython GUI。

5. 總結(jié)

本項(xiàng)目通過 wxPython 構(gòu)建用戶界面,并結(jié)合 openpyxl 解析 Markdown 表格并生成 Excel 文件。它適用于希望從 Markdown 結(jié)構(gòu)化數(shù)據(jù)導(dǎo)出 Excel 的用戶,簡化了手動整理表格的過程。

你可以進(jìn)一步優(yōu)化該項(xiàng)目,如:

增加 Markdown 語法校驗(yàn)。

允許用戶調(diào)整 Excel 文件格式。

增加數(shù)據(jù)預(yù)覽功能。

6.運(yùn)行結(jié)果

以上就是利用Python開發(fā)Markdown表格結(jié)構(gòu)轉(zhuǎn)換為Excel工具的詳細(xì)內(nèi)容,更多關(guān)于Python Markdown轉(zhuǎn)Excel的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 基于keras 模型、結(jié)構(gòu)、權(quán)重保存的實(shí)現(xiàn)

    基于keras 模型、結(jié)構(gòu)、權(quán)重保存的實(shí)現(xiàn)

    今天小編就為大家分享一篇基于keras 模型、結(jié)構(gòu)、權(quán)重保存的實(shí)現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python OpenCV高斯金字塔與拉普拉斯金字塔的實(shí)現(xiàn)

    Python OpenCV高斯金字塔與拉普拉斯金字塔的實(shí)現(xiàn)

    這篇文章主要介紹了Python OpenCV高斯金字塔與拉普拉斯金字塔的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python pyttsx3庫實(shí)現(xiàn)文本轉(zhuǎn)語音功能的示例

    Python pyttsx3庫實(shí)現(xiàn)文本轉(zhuǎn)語音功能的示例

    pyttsx3是一個功能強(qiáng)大且易于使用的文本轉(zhuǎn)語音庫,適合需要離線語音合成的場景,本文就來介紹一下Python pyttsx3庫實(shí)現(xiàn)文本轉(zhuǎn)語音功能的示例,感興趣的可以了解一下
    2025-04-04
  • django orm模糊查詢、正則匹配多個值方式

    django orm模糊查詢、正則匹配多個值方式

    這篇文章主要介紹了django orm模糊查詢、正則匹配多個值方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python正則表達(dá)式介紹

    Python正則表達(dá)式介紹

    本文介紹了Python對于正則表達(dá)式的支持,包括正則表達(dá)式基礎(chǔ)以及Python正則表達(dá)式標(biāo)準(zhǔn)庫的完整介紹及使用示例。本文的內(nèi)容不包括如何編寫高效的正則表達(dá)式、如何優(yōu)化正則表達(dá)式,這些主題請查看其他教程
    2012-08-08
  • Django框架用戶注銷功能實(shí)現(xiàn)方法分析

    Django框架用戶注銷功能實(shí)現(xiàn)方法分析

    這篇文章主要介紹了Django框架用戶注銷功能實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了基于Django框架的刪除cookie實(shí)現(xiàn)用戶注銷功能的相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • python 多線程重啟方法

    python 多線程重啟方法

    今天小編就為大家分享一篇python 多線程重啟方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • python實(shí)現(xiàn)停車管理系統(tǒng)

    python實(shí)現(xiàn)停車管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)停車管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Python(Tornado)模擬登錄小米搶手機(jī)

    Python(Tornado)模擬登錄小米搶手機(jī)

    用Python(Tornado)模擬登錄小米帳號,搶小米手機(jī)
    2013-11-11
  • python 如何將數(shù)據(jù)寫入本地txt文本文件的實(shí)現(xiàn)方法

    python 如何將數(shù)據(jù)寫入本地txt文本文件的實(shí)現(xiàn)方法

    這篇文章主要介紹了python 如何將數(shù)據(jù)寫入本地txt文本文件的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評論