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

Python實現(xiàn)快速提取Word表格并轉(zhuǎn)Markdown

 更新時間:2025年04月10日 09:17:26   作者:Python測試之道  
這篇文章主要為大家詳細介紹了一套Python零基礎(chǔ)可操作的代碼方案,幫助測試工程師3分鐘內(nèi)完成表格提取與轉(zhuǎn)換,直接對接自動化測試或大模型,需要的小伙伴可以參考下

一、為什么需要這個工具

在測試工作中,我們常遇到這樣的場景:

  • 需求文檔是Word格式,但需要將表格數(shù)據(jù)提取出來生成測試用例
  • 手動復(fù)制粘貼效率低且易出錯
  • 大模型需要結(jié)構(gòu)化數(shù)據(jù)輸入,但Word表格格式復(fù)雜

本文提供一套零基礎(chǔ)可操作的代碼方案,幫助測試工程師3分鐘內(nèi)完成表格提取與轉(zhuǎn)換,直接對接自動化測試或大模型。

二、代碼實戰(zhàn):三步搞定表格提取

第一步:安裝依賴

pip install python-docx

注意:

  • 如果提示權(quán)限問題,可在命令前加 sudo(Linux/macOS)或以管理員身份運行命令行(Windows)。
  • 如果文檔包含復(fù)雜格式(如合并單元格),需確保 python-docx 版本 ≥ 0.8.11。

第二步:核心代碼解析

1. 標(biāo)題檢測:精準(zhǔn)定位目標(biāo)段落

def is_heading_enhanced(paragraph):
    # 標(biāo)題特征:樣式名稱含關(guān)鍵詞 + 字體加粗 + 字體足夠大
    style_name = (paragraph.style.name or "").lower()
    if "標(biāo)題" in style_name or "heading" in style_name:
        return True
    
    try:
        font = paragraph.style.font
        return (font.size.pt >= 14 and font.bold) if font.size else False
    except:
        return False

關(guān)鍵點詳解:

樣式名稱匹配:

  • 優(yōu)先檢查標(biāo)題樣式名稱是否包含 標(biāo)題(中文)或 heading(英文),如 Heading 1、標(biāo)題1。
  • 這一設(shè)計能快速定位到文檔中明確標(biāo)記的標(biāo)題段落。

格式兜底判斷:

  • 字體大?。簶?biāo)題通常比正文大,這里設(shè)置閾值為14pt(可調(diào)整)。
  • 加粗要求:標(biāo)題一般需要加粗,確保格式一致性。
  • 如果段落樣式名稱未包含關(guān)鍵詞,但滿足格式條件,也會被識別為標(biāo)題。

異常處理:

使用 try-except 捕獲字體信息缺失的異常,避免程序崩潰。

2. 表格抓?。喊次臋n順序提取

def get_tables_under_heading(doc_path, target_title):
    from docx import Document
    doc = Document(doc_path)
    target_tables = []
    found = False

    for element in doc.element.body.iter():
        if element.tag.endswith('p'):  # 段落
            par = Paragraph(element, doc)
            if target_title in par.text and is_heading_enhanced(par):
                found = True
            elif found and is_heading_enhanced(par):  # 遇到新標(biāo)題停止
                break
        elif element.tag.endswith('tbl') and found:  # 表格
            table = Table(element, doc)
            data = [[cell.text.strip() for cell in row.cells] for row in table.rows]
            target_tables.append(data)
    
    return target_tables

實戰(zhàn)技巧詳解:

文檔元素遍歷:

  • 通過 doc.element.body.iter() 直接遍歷Word文檔底層元素,確保段落和表格的順序與實際文檔一致。
  • element.tag.endswith('p') 和 element.tag.endswith('tbl') 分別識別段落和表格的XML標(biāo)簽。

雙重標(biāo)記機制:

  • found 標(biāo)記:當(dāng)找到目標(biāo)標(biāo)題后,標(biāo)記為 True,開始收集后續(xù)的表格。
  • 新標(biāo)題終止:一旦遇到新標(biāo)題(同樣滿足標(biāo)題檢測條件),立即停止收集,避免誤取其他章節(jié)的表格。

數(shù)據(jù)提取:

使用列表推導(dǎo)式逐行提取表格內(nèi)容,cell.text.strip() 去除單元格中的多余空格。

3. 轉(zhuǎn)換Markdown:結(jié)構(gòu)化輸出

def to_markdown(table_data):
    if not table_data:
        return ""
    headers = table_data[0]
    md = f"| {' | '.join(headers)} |\n"
    md += f"| {' | '.join(['---']*len(headers))} |\n"
    for row in table_data[1:]:
        md += f"| {' | '.join(row)} |\n"
    return md

效果示例:

| 用戶角色 | 創(chuàng)建權(quán)限 | 刪除權(quán)限 | 修改權(quán)限 |
|----------|----------|----------|----------|
| 管理員   | 是       | 是       | 是       |
| 普通用戶 | 否       | 否       | 是       |

細節(jié)說明:

表頭與分隔符:第一行數(shù)據(jù)作為表頭,用 --- 分隔表頭與數(shù)據(jù)行。

空表格處理:如果輸入表格為空,直接返回空字符串,避免錯誤。

兼容性:適用于大多數(shù)表格,但若表格包含合并單元格,需額外處理(見后續(xù)優(yōu)化建議)。

第三步:調(diào)用代碼(5分鐘上手)

def main():
    doc_path = "需求文檔_v2.0.docx"        # 替換為你的文檔路徑
    target_title = "功能權(quán)限矩陣"           # 替換為目標(biāo)標(biāo)題
    
    # 提取表格
    tables = get_tables_under_heading(doc_path, target_title)
    
    # 輸出Markdown
    for idx, table in enumerate(tables, 1):
        print(f"--- 表格{idx} ---\n")
        print(to_markdown(table))
        print("\n-------------------\n")

if __name__ == "__main__":
    main()

執(zhí)行步驟:

  • 將代碼保存為 extract_tables.py。
  • 修改 doc_path 和 target_title 為實際文檔路徑和標(biāo)題。
  • 運行 python extract_tables.py,即可在控制臺看到Markdown格式的表格。

三、常見問題與解決方案

Q1:檢測不到標(biāo)題

可能原因:

  • 標(biāo)題樣式名稱不符合 標(biāo)題 或 heading 關(guān)鍵詞。
  • 標(biāo)題字體大小或加粗格式未達標(biāo)。

解決方案:

1.檢查標(biāo)題樣式:

  • 在Word中右鍵標(biāo)題段落 → 選擇「段落樣式」,確認樣式名稱是否包含關(guān)鍵詞。
  • 例如:將樣式改為「標(biāo)題 1」或「Heading 2」。

2.手動調(diào)整格式判斷:

# 在 is_heading_enhanced 中,降低字體大小要求
return (font.size.pt >= 12 and font.bold) if font.size else False

Q2:表格提取不完整

可能原因:

  • 表格與標(biāo)題不在同一章節(jié),中間有其他標(biāo)題阻隔。
  • 文檔中存在多個同名標(biāo)題,代碼只提取第一個。

解決方案:

強制遍歷所有表格:

# 移除遇到新標(biāo)題停止的邏輯
# 刪除以下代碼:
elif found and is_heading_enhanced(par): break

精確匹配標(biāo)題:

如果標(biāo)題文本唯一,可直接使用 par.text.strip() == target_title 完全匹配。

Q3:Markdown格式混亂

可能原因:

單元格內(nèi)容包含換行符或特殊符號。

解決方案:

清理數(shù)據(jù):

# 在提取單元格時去除換行符
cell.text.strip().replace('\n', ' ')

手動調(diào)整:

將輸出結(jié)果復(fù)制到Markdown編輯器(如Typora),通過可視化界面調(diào)整格式。

四、真實場景應(yīng)用案例

場景1:生成接口測試用例

# 提取"接口參數(shù)表"后,直接生成測試用例模板
table_data = get_tables_under_heading("接口文檔.docx", "接口參數(shù)表")[0]
for row in table_data[1:]:
    param, type_, example = row
    print(f"測試點:{param}參數(shù)為{example}時,接口應(yīng)返回{type_}類型")

輸出示例:

測試點:user_id參數(shù)為123時,接口應(yīng)返回int類型
測試點:username參數(shù)為"admin"時,接口應(yīng)返回str類型

場景2:自動化測試數(shù)據(jù)生成

# 將表格數(shù)據(jù)寫入CSV文件供測試框架讀取
import csv

tables = get_tables_under_heading("測試數(shù)據(jù).docx", "登錄用例數(shù)據(jù)")
with open("test_data.csv", "w", newline="") as f:
    writer = csv.writer(f)
    for table in tables:
        writer.writerows(table)

五、代碼擴展與優(yōu)化建議

1. 支持多級標(biāo)題

def get_tables_under_heading(doc_path, target_title, level=1):
    # 新增參數(shù):level表示標(biāo)題層級(如1級標(biāo)題)
    # 在is_heading_enhanced中增加層級判斷
    if f"heading{level}" in style_name:
        return True

2. 處理合并單元格

def extract_cell(cell):
    # 處理合并單元格時的空值
    if cell.text.strip():
        return cell.text.strip()
    else:
        return "[合并單元格]"

3. 日志記錄與錯誤提示

import logging
logging.basicConfig(level=logging.INFO)

def main():
    try:
        tables = get_tables_under_heading(...)
    except FileNotFoundError:
        logging.error("文檔路徑錯誤,請檢查文件是否存在!")

六、總結(jié)

通過這套方案,你可以:

  • 快速定位文檔中指定標(biāo)題的表格
  • 自動化輸出結(jié)構(gòu)化Markdown數(shù)據(jù)
  • 無縫對接測試用例生成、自動化測試腳本等下游流程

立即嘗試:

  • 將代碼保存為extract_tables.py。
  • 替換文檔路徑和標(biāo)題。
  • 運行代碼,查看輸出結(jié)果。

以上就是Python實現(xiàn)快速提取Word表格并轉(zhuǎn)Markdown的詳細內(nèi)容,更多關(guān)于Python提取Word轉(zhuǎn)Markdown的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python 性能優(yōu)化方法小結(jié)

    python 性能優(yōu)化方法小結(jié)

    本文主要介紹了python 提高性能的方法。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • 新手如何發(fā)布Python項目開源包過程詳解

    新手如何發(fā)布Python項目開源包過程詳解

    這篇文章主要介紹了新手如何發(fā)布Python項目開源包過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • 一波神奇的Python語句、函數(shù)與方法的使用技巧總結(jié)

    一波神奇的Python語句、函數(shù)與方法的使用技巧總結(jié)

    這篇文章主要介紹了一波神奇的Python函數(shù)與方法的使用技巧總結(jié),包括裝飾器和with語句等的不常見用法,需要的朋友可以參考下
    2015-12-12
  • Python實現(xiàn)查找數(shù)組中任意第k大的數(shù)字算法示例

    Python實現(xiàn)查找數(shù)組中任意第k大的數(shù)字算法示例

    這篇文章主要介紹了Python實現(xiàn)查找數(shù)組中任意第k大的數(shù)字算法,涉及Python針對數(shù)組的排序、查找等相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • 詳細分析Python collections工具庫

    詳細分析Python collections工具庫

    這篇文章主要介紹了詳解Python collections工具庫的相關(guān)資料,文中講解非常細致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 關(guān)于jupyter代碼自動補全設(shè)置方式

    關(guān)于jupyter代碼自動補全設(shè)置方式

    這篇文章主要介紹了關(guān)于jupyter代碼自動補全設(shè)置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • python和pyqt-tools安裝位置圖文詳解

    python和pyqt-tools安裝位置圖文詳解

    查詢Python安裝位置可通過命令行輸入import sys和sys.path實現(xiàn),而Python-tools的安裝位置則可在Python文件夾內(nèi)找到,本文介紹了如何查詢Python及其工具包PyQt-tools的安裝位置,便于用戶進行相關(guān)設(shè)置或調(diào)試,更多關(guān)于Python安裝和配置的內(nèi)容,可查閱腳本之家的相關(guān)文章
    2024-09-09
  • 解讀opencv中cv2.imread()返回值為None問題及解決

    解讀opencv中cv2.imread()返回值為None問題及解決

    這篇文章主要介紹了解讀opencv中cv2.imread()返回值為None問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python:通配符查找、拷貝文件的操作

    Python:通配符查找、拷貝文件的操作

    這篇文章主要介紹了Python:通配符查找、拷貝文件的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 詳解python的二進制轉(zhuǎn)化模塊

    詳解python的二進制轉(zhuǎn)化模塊

    這篇文章主要為大家介紹了python的二進制轉(zhuǎn)化模塊,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01

最新評論