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

使用Python實現(xiàn)Word文檔文本格式化的完整指南

 更新時間:2026年03月25日 08:12:34   作者:站大爺IP  
這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)Word文檔文本格式化,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

?周一早上九點,你打開電腦,發(fā)現(xiàn)領(lǐng)導(dǎo)昨晚十一點發(fā)來的消息:“小張,幫我把這份合同里所有的公司名稱改成加粗紅色,五十頁那個,今天開會要用。”

你打開文檔,翻到第一頁,選中公司名,點加粗,點紅色,然后滾到下一頁。五十頁的文檔,光滾動就花了五分鐘。你揉了揉眼睛,心想這要是每個月都來這么一次,眼睛遲早要廢。

這種機械化的Word排版工作,最適合交給Python。python-docx這個庫,就是專門干這個的。

先搞清楚Word文檔的“三層結(jié)構(gòu)”

在用python-docx之前,得先理解一個概念:Word文檔的文本不是一整塊,而是分了三層。

最外層是Document,代表整個文檔。往下一層是Paragraph,也就是段落。再往下是Run,這才是真正存放文字的地方。

為什么要有Run這個概念?因為一個段落里可能有好幾種不同的格式。比如“這是加粗的文字”這句話,實際上被分成了三個Run:第一個Run是“這是”,第二個Run是“加粗”(帶加粗屬性),第三個Run是“的文字”。每個Run可以單獨設(shè)置字體、大小、顏色。

理解這個結(jié)構(gòu),后面的所有操作就好辦了——想改格式,就要找到對應(yīng)的Run,而不是直接改段落。

環(huán)境準備

先裝庫:

pip install python-docx

在代碼里導(dǎo)入的時候,用docx這個名字,不是python-docx

from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH

shared里面是尺寸和顏色相關(guān)的工具,enum.text里是對齊方式之類的常量。

讀取現(xiàn)有文檔

假設(shè)你要處理的是那份五十頁的合同:

doc = Document('合同.docx')

這樣就加載進來了。doc.paragraphs里放著所有段落,你可以遍歷它們:

for para in doc.paragraphs:
    print(para.text)

但只打印文本不夠,你要改的是格式。格式藏在每個段落的runs里面:

for para in doc.paragraphs:
    for run in para.runs:
        # 在這里操作每個run

改字體:加粗、顏色、大小

回到那個需求:把所有“某某科技有限公司”改成加粗紅色。

from docx import Document
from docx.shared import Pt, RGBColor

doc = Document('合同.docx')

target = '某某科技有限公司'

for para in doc.paragraphs:
    for run in para.runs:
        if target in run.text:
            # 把這個run里的目標文字單獨拎出來改格式
            # 注意:如果run里不止目標文字,需要拆開處理
            run.font.bold = True
            run.font.color.rgb = RGBColor(255, 0, 0)  # 紅色
            run.font.size = Pt(12)  # 字號,可選

但這里有個坑。如果一個run里是“本合同的乙方為某某科技有限公司,特此聲明”,你直接把整個run加粗標紅,那整句話都變了。你只想要“某某科技有限公司”這個關(guān)鍵詞變色。

解決辦法是把run拆開:

for para in doc.paragraphs:
    for run in para.runs:
        if target in run.text:
            # 獲取run的原始格式
            original_text = run.text
            # 按目標關(guān)鍵詞拆分
            parts = original_text.split(target)
            
            # 清空當(dāng)前run
            run.text = parts[0]
            
            # 插入目標關(guān)鍵詞,帶新格式
            new_run = para.add_run(target)
            new_run.font.bold = True
            new_run.font.color.rgb = RGBColor(255, 0, 0)
            
            # 插入剩下的文本,保留原格式
            if len(parts) > 1:
                remaining_run = para.add_run(parts[1])
                # 復(fù)制原格式
                remaining_run.font.size = run.font.size
                remaining_run.font.name = run.font.name

這個邏輯稍微有點繞,但核心思路就是:找到關(guān)鍵詞,把run拆成三段,中間那段單獨設(shè)格式。

改段落:對齊、行距、縮進

有時候你需要改的不是某個詞,而是整個段落的樣式。比如把某些段落居中對齊。

from docx.enum.text import WD_ALIGN_PARAGRAPH

for para in doc.paragraphs:
    if '重要提示' in para.text:
        para.alignment = WD_ALIGN_PARAGRAPH.CENTER

行距和段間距也可以調(diào)。paragraph_format這個屬性管這些:

from docx.shared import Pt

for para in doc.paragraphs:
    paragraph_format = para.paragraph_format
    paragraph_format.line_spacing = Pt(20)  # 行距20磅
    paragraph_format.space_before = Pt(12)  # 段前距
    paragraph_format.space_after = Pt(6)    # 段后距

首行縮進是中文文檔的常見需求:

from docx.shared import Pt

for para in doc.paragraphs:
    # 排除標題等不需要縮進的段落
    if len(para.text) > 10 and not para.text.startswith('一、'):
        para.paragraph_format.first_line_indent = Pt(24)  # 兩個字符

改標題樣式

文檔里的標題通常有自己的樣式。python-docx可以直接通過樣式名來設(shè)置:

# 添加一個新標題
doc.add_heading('第一章 概述', level=1)

但如果要改已有的標題樣式,可以這樣:

for para in doc.paragraphs:
    if para.style.name.startswith('Heading'):
        # 這是標題段落
        for run in para.runs:
            run.font.bold = True
            run.font.size = Pt(16)

中文字體的問題

默認情況下,設(shè)置run.font.name = '宋體'可能不生效。因為Word里的中文字體需要用另一個屬性指定:

from docx.oxml.ns import qn

run = para.add_run('這是一段中文')
run.font.name = '宋體'
run._element.rPr.rFonts.set(qn('w:eastAsia'), '宋體')

w:eastAsia就是指定東亞字體的那個屬性。這個寫法有點繞,但好在可以封裝成一個函數(shù):

def set_chinese_font(run, font_name):
    run.font.name = font_name
    run._element.rPr.rFonts.set(qn('w:eastAsia'), font_name)

批量處理多個文檔

如果不止一份合同要改,而是整個文件夾的文檔都需要統(tǒng)一格式:

import os
from docx import Document

folder = '待處理文檔'
output_folder = '處理后文檔'

for filename in os.listdir(folder):
    if filename.endswith('.docx'):
        filepath = os.path.join(folder, filename)
        doc = Document(filepath)
        
        # 在這里執(zhí)行你的格式化操作
        for para in doc.paragraphs:
            for run in para.runs:
                # 你的邏輯
                pass
        
        # 另存,避免覆蓋原文件
        output_path = os.path.join(output_folder, filename)
        doc.save(output_path)

保存

改完之后,記得保存:

doc.save('合同_已格式化.docx')

建議另存為新文件,萬一改錯了還能回去找原版。

回到那個周一早上的場景。如果你用上面的代碼跑一遍,五十頁的合同大概只需要兩秒鐘。加粗、標紅、調(diào)字號、改標題樣式,一氣呵成。剩下的時間,你可以安心喝杯咖啡,而不是在文檔里反復(fù)滾動鼠標。

python-docx不能幫你寫報告,但至少能讓你不用再做那些重復(fù)的點鼠標動作。這大概是它最值錢的地方。

到此這篇關(guān)于使用Python實現(xiàn)Word文檔文本格式化的完整指南的文章就介紹到這了,更多相關(guān)Python Word文本格式化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談python print(xx, flush = True) 全網(wǎng)最清晰的解釋

    淺談python print(xx, flush = True) 全網(wǎng)最清晰的解釋

    今天小編就為大家分享一篇淺談python print(xx, flush = True) 全網(wǎng)最清晰的解釋,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Scrapy之爬取結(jié)果導(dǎo)出為Excel的實現(xiàn)過程

    Scrapy之爬取結(jié)果導(dǎo)出為Excel的實現(xiàn)過程

    這篇文章主要介紹了Scrapy之爬取結(jié)果導(dǎo)出為Excel的實現(xiàn)過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • python中tkinter簡要教程(小白必看)

    python中tkinter簡要教程(小白必看)

    這篇文章主要介紹了python中tkinter的相關(guān)資料,詳細講解了如何使用Tkinter創(chuàng)建主窗口、常用控件、布局管理器和事件處理機制,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-05-05
  • python+selenium+chromedriver實現(xiàn)爬蟲示例代碼

    python+selenium+chromedriver實現(xiàn)爬蟲示例代碼

    這篇文章主要介紹了python+selenium+chromedriver實現(xiàn)爬蟲示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python編程求質(zhì)數(shù)實例代碼

    Python編程求質(zhì)數(shù)實例代碼

    這篇文章主要介紹了Python編程求質(zhì)數(shù)實例代碼,對求200,1000和100000以內(nèi)的質(zhì)數(shù)進行了測試,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • pandas時間序列之pd.to_datetime()的實現(xiàn)

    pandas時間序列之pd.to_datetime()的實現(xiàn)

    本文主要介紹了pandas時間序列之pd.to_datetime()的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2022-06-06
  • python pandas dataframe 行列選擇,切片操作方法

    python pandas dataframe 行列選擇,切片操作方法

    下面小編就為大家分享一篇python pandas dataframe 行列選擇,切片操作方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 解決python腳本中error: unrecognized arguments: True錯誤

    解決python腳本中error: unrecognized arguments: True錯誤

    這篇文章主要介紹了解決python腳本中error: unrecognized arguments: True錯誤,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python基礎(chǔ)之語法錯誤和異常詳解

    Python基礎(chǔ)之語法錯誤和異常詳解

    Python有兩種錯誤很容易辨認:語法錯誤和異常.本文就給大家詳細介紹一下Python錯誤和異常,對正在學(xué)習(xí)python的小伙伴們很有幫助哦,需要的朋友可以參考下
    2021-05-05
  • python使用matplotlib定制繪圖的線型、標記類型

    python使用matplotlib定制繪圖的線型、標記類型

    這篇文章主要給大家詳細介紹了python使用matplotlib定制繪圖的線型、標記類型,文中有詳細的代碼示例,具有一定的參考價值,需要的朋友可以參考下
    2023-07-07

最新評論

莫力| 襄城县| 富平县| 金华市| 樟树市| 山阴县| 海南省| 鹤峰县| 鲜城| 昂仁县| 牟定县| 内江市| 苏尼特左旗| 黎平县| 台安县| 铁岭市| 汉源县| 五家渠市| 西盟| 资溪县| 大石桥市| 静安区| 南和县| 孙吴县| 舟山市| 吕梁市| 新化县| 梨树县| 汕头市| 灯塔市| 安顺市| 修文县| 辛集市| 革吉县| 松江区| 深圳市| 永昌县| 丽水市| 綦江县| 河源市| 阳原县|