最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python文檔處理之實(shí)現(xiàn)自動(dòng)刪除Word中帶指定底紋顏色的內(nèi)容

 更新時(shí)間:2026年02月28日 08:54:03   作者:夠好了嗎?  
這篇文章主要為大家介紹了一個(gè)Python腳本,可以用于自動(dòng)刪除 Word 文檔中帶有指定底紋顏色的解析內(nèi)容,文中的示例代碼講解詳細(xì),有需要的小伙伴可以了解下

代碼功能概述

該腳本用于自動(dòng)刪除 Word 文檔中帶有指定底紋顏色的解析內(nèi)容(如【分析】、【詳解】等),同時(shí)保留答案塊(以【答案】開頭的有底紋段落及其后續(xù)連續(xù)有底紋的答案內(nèi)容)。文檔中所有無底紋的段落(題目描述、選項(xiàng)等)以及答案塊內(nèi)的內(nèi)容都會被原樣保留,其余文檔結(jié)構(gòu)(表格、頁眉頁腳、樣式)不受影響。

腳本支持兩種輸入模式:

  • 處理單個(gè)文件:輸入一個(gè) .docx 文件路徑,輸出一個(gè)處理后的文件。
  • 批量處理文件夾:輸入一個(gè)文件夾路徑,自動(dòng)處理該文件夾下所有 .docx 文件,輸出到指定文件夾。

文檔內(nèi)容示例

腳本代碼 

import os
from docx import Document
from docx.oxml.ns import qn

# ====== 配置參數(shù)(請根據(jù)您的文檔修改)======
TARGET_SHADING_COLOR = 'F2F2F2'  # 從檢測腳本獲得的底紋顏色
ANALYSIS_MARKERS = ['【分析】', '【詳解】', '【點(diǎn)睛】', '【錯(cuò)因】', '【避錯(cuò)關(guān)鍵】']
ANSWER_MARKER = '【答案】'
DEBUG = True  # 打印詳細(xì)處理信息

# Word命名空間(用于查找元素)
NSMAP = {'w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'}


def has_shading_color(element, color):
    """判斷元素是否具有指定底紋顏色"""
    # 使用 findall 并傳入命名空間
    shading_elements = element.findall('.//w:shd', namespaces=NSMAP)
    if shading_elements:
        fill = shading_elements[0].get(qn('w:fill'))
        if fill:
            fill_clean = fill.strip().upper().lstrip('#')
            color_clean = color.strip().upper().lstrip('#')
            return fill_clean == color_clean
    return False


def is_analysis_start(text):
    """是否以解析標(biāo)記開頭"""
    return any(text.startswith(marker) for marker in ANALYSIS_MARKERS)


def collect_all_shaded_paragraphs(doc):
    """
    收集文檔中所有具有目標(biāo)底紋顏色的段落(包括文本框內(nèi))。
    返回列表,每個(gè)元素為 (element, text, parent)
    """
    items = []
    # 普通段落
    for para in doc.paragraphs:
        element = para._element
        if has_shading_color(element, TARGET_SHADING_COLOR):
            items.append((element, para.text.strip(), element.getparent()))
    # 文本框段落
    for txbx in doc.element.findall('.//w:txbxContent', namespaces=NSMAP):
        for p in txbx.findall('.//w:p', namespaces=NSMAP):
            if has_shading_color(p, TARGET_SHADING_COLOR):
                # 提取文本
                texts = [t.text for t in p.findall('.//w:t', namespaces=NSMAP) if t.text]
                full_text = ''.join(texts).strip()
                items.append((p, full_text, p.getparent()))
    return items


def process_docx_inplace(input_path, output_path):
    """
    在原文檔基礎(chǔ)上直接刪除解析段落,保存到 output_path。
    """
    doc = Document(input_path)
    # 收集所有有底紋的段落
    shaded_items = collect_all_shaded_paragraphs(doc)
    n = len(shaded_items)
    delete_flags = [False] * n
    debug_info = []

    i = 0
    while i < n:
        element, text, parent = shaded_items[i]
        if text.startswith(ANSWER_MARKER):
            # 答案開始,保留
            if DEBUG:
                debug_info.append(f"保留答案開始 {i}: {text[:50]}")
            i += 1
            # 保留后續(xù)連續(xù)的有底紋段落,直到遇到解析標(biāo)記
            while i < n:
                next_element, next_text, _ = shaded_items[i]
                if is_analysis_start(next_text):
                    break
                if DEBUG:
                    debug_info.append(f"保留答案內(nèi)容 {i}: {next_text[:50]}")
                i += 1
            continue
        elif is_analysis_start(text):
            # 解析標(biāo)記,刪除本段及其后連續(xù)的有底紋段落(直到下一個(gè)答案塊或解析標(biāo)記)
            if DEBUG:
                debug_info.append(f"刪除解析開始 {i}: {text[:50]}")
            delete_flags[i] = True
            i += 1
            while i < n:
                next_element, next_text, _ = shaded_items[i]
                if next_text.startswith(ANSWER_MARKER) or is_analysis_start(next_text):
                    break
                if DEBUG:
                    debug_info.append(f"刪除解析內(nèi)容 {i}: {next_text[:50]}")
                delete_flags[i] = True
                i += 1
            continue
        else:
            # 有底紋但不是答案也不是解析,刪除(通常不會出現(xiàn))
            if DEBUG:
                debug_info.append(f"刪除其他有底紋段落 {i}: {text[:50]}")
            delete_flags[i] = True
            i += 1

    # 從后往前刪除標(biāo)記的段落元素
    for idx in range(n - 1, -1, -1):
        if delete_flags[idx]:
            element, _, parent = shaded_items[idx]
            parent.remove(element)

    # 保存文檔
    doc.save(output_path)

    if DEBUG:
        print(f"處理文件: {os.path.basename(input_path)}")
        print(f"共處理有底紋段落 {n} 個(gè),刪除 {sum(delete_flags)} 個(gè)")
        print("=== 調(diào)試信息 ===")
        for info in debug_info[-20:]:  # 只打印最后20條,避免過長
            print(info)
        print("=== 處理完成 ===\n")


def process_file_or_folder(input_path, output_path):
    """
    自動(dòng)判斷輸入是文件還是文件夾:
    - 如果是文件,處理該文件
    - 如果是文件夾,處理文件夾下所有 .docx 文件
    """
    if os.path.isfile(input_path):
        # 單個(gè)文件
        if not input_path.endswith('.docx'):
            print("請?zhí)峁?.docx 文件")
            return
        if os.path.isdir(output_path):
            base = os.path.basename(input_path).replace('.docx', '_已處理.docx')
            output_file = os.path.join(output_path, base)
        else:
            output_file = output_path
        process_docx_inplace(input_path, output_file)
        print(f'處理完成:{os.path.basename(input_path)} -> {output_file}')
    elif os.path.isdir(input_path):
        # 文件夾
        if not os.path.exists(output_path):
            os.makedirs(output_path)
        for filename in os.listdir(input_path):
            if filename.endswith('.docx'):
                full_input = os.path.join(input_path, filename)
                full_output = os.path.join(output_path, filename.replace('.docx', '_已處理.docx'))
                process_docx_inplace(full_input, full_output)
                print(f'處理完成:{filename}')
    else:
        print("輸入路徑不存在")


if __name__ == '__main__':
    # ===== 使用示例 =====
    # 1. 處理單個(gè)文件,輸出到指定路徑
    input_path = r'C:\Desktop\讀書筆記\講義'
    output_path = r'C:\Desktop\讀書筆記\講義'
    process_file_or_folder(input_path, output_path)

到此這篇關(guān)于Python文檔處理之實(shí)現(xiàn)自動(dòng)刪除Word中帶指定底紋顏色的內(nèi)容的文章就介紹到這了,更多相關(guān)Python Word文檔處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • django之導(dǎo)入并執(zhí)行自定義的函數(shù)模塊圖解

    django之導(dǎo)入并執(zhí)行自定義的函數(shù)模塊圖解

    這篇文章主要介紹了django之導(dǎo)入并執(zhí)行自定義的函數(shù)模塊圖解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Django filter動(dòng)態(tài)過濾與排序?qū)崿F(xiàn)過程解析

    Django filter動(dòng)態(tài)過濾與排序?qū)崿F(xiàn)過程解析

    這篇文章主要介紹了Django filter動(dòng)態(tài)過濾與排序?qū)崿F(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 解決遇到PermissionError:[Errno 13] Permission denied:XXXX錯(cuò)誤的問題

    解決遇到PermissionError:[Errno 13] Permission den

    遇到"PermissionError:[Errno 13] Permission denied"通常是權(quán)限不足導(dǎo)致,解決此問題的方法包括檢查并更改文件權(quán)限,使用管理員權(quán)限運(yùn)行命令,或接觸文件所有者,這些步驟有助于確保用戶具有執(zhí)行操作所需的權(quán)限,有時(shí),文件或目錄可能被鎖定
    2024-09-09
  • 程序猿新手學(xué)習(xí)必備的Python工具整合

    程序猿新手學(xué)習(xí)必備的Python工具整合

    這篇文章主要介紹了程序猿新手必備的Python工具整合,Python 是一種開源編程語言,用于 Web 編程、數(shù)據(jù)科學(xué)、人工智能和許多科學(xué)應(yīng)用
    2021-09-09
  • Python中實(shí)現(xiàn)3D模型動(dòng)態(tài)加載的4種方法

    Python中實(shí)現(xiàn)3D模型動(dòng)態(tài)加載的4種方法

    本文討論了Python中實(shí)現(xiàn)3D模型動(dòng)態(tài)加載的方法,包括PyOpenGL、Panda3D和ModernGL等,詳細(xì)介紹了基于PyOpenGL的渲染管線和模型加載;利用VPython的場景構(gòu)建和對象管理;基于ModernGL的高效GPU加速方案;四種方法綜合對比與未來優(yōu)化方向等場景,需要的朋友可以參考下
    2026-04-04
  • Python的進(jìn)制轉(zhuǎn)換和ASCLL轉(zhuǎn)換你了解嗎

    Python的進(jìn)制轉(zhuǎn)換和ASCLL轉(zhuǎn)換你了解嗎

    這篇文章主要為大家詳細(xì)介紹了Python的進(jìn)制轉(zhuǎn)換和ASCLL轉(zhuǎn)換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • OpenAI?Function?Calling特性示例詳解

    OpenAI?Function?Calling特性示例詳解

    這篇文章主要為大家介紹了OpenAI?Function?Calling特性作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Python辦公自動(dòng)化之將任意文件轉(zhuǎn)為PDF格式

    Python辦公自動(dòng)化之將任意文件轉(zhuǎn)為PDF格式

    這種把某個(gè)文件轉(zhuǎn)為pdf枯燥無聊的工作,既沒有什么技術(shù)含量又累. 今天辰哥就教大家將任意文件批量轉(zhuǎn)為PDF,這里以日常辦公的word、excel、ppt為例,這三種格式的文件轉(zhuǎn)為PDF.需要的朋友可以參考下
    2021-06-06
  • Python 基于win32com客戶端實(shí)現(xiàn)Excel操作的詳細(xì)過程

    Python 基于win32com客戶端實(shí)現(xiàn)Excel操作的詳細(xì)過程

    這篇文章主要介紹了Python 基于win32com客戶端實(shí)現(xiàn)Excel操作的詳細(xì)過程,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Django分頁器的用法詳解

    Django分頁器的用法詳解

    本文主要介紹在利用Django開發(fā)MVT模型項(xiàng)目時(shí)分頁器的使用,感興趣的朋友可以參考下
    2021-05-05

最新評論

新龙县| 海兴县| 太仆寺旗| 聂荣县| 呼图壁县| 子洲县| 永康市| 宁武县| 晋城| 夹江县| 泰宁县| 甘肃省| 汕头市| 乐平市| 土默特右旗| 织金县| 开原市| 龙口市| 内江市| 武城县| 夏河县| 修文县| 安乡县| 城固县| 河曲县| 桐城市| 姚安县| 石景山区| 阳山县| 民丰县| 平利县| 凉山| 五大连池市| 凤山县| 天峨县| 蒲江县| 梅州市| 西平县| 滁州市| 正镶白旗| 集安市|