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

Python操作Word文檔屬性與字?jǐn)?shù)統(tǒng)計(jì)的方法詳解

 更新時(shí)間:2026年04月17日 15:01:09   作者:站大爺IP  
這篇文章主要為大家詳細(xì)介紹了Python操作Word文檔屬性與字?jǐn)?shù)統(tǒng)計(jì)的相關(guān)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

?小李是剛?cè)肼殘?chǎng)的行政助理,這天領(lǐng)導(dǎo)扔給他30份項(xiàng)目報(bào)告,要求統(tǒng)計(jì)每份報(bào)告的字?jǐn)?shù),還要提取創(chuàng)建時(shí)間和最后修改作者。手動(dòng)打開(kāi)一個(gè)個(gè)Word文檔復(fù)制粘貼,顯然不現(xiàn)實(shí),小李決定用Python試試。

準(zhǔn)備工作:安裝與導(dǎo)入

操作Word文檔最常用的庫(kù)是python-docx。它只支持.docx格式,老舊的.doc格式需要先轉(zhuǎn)換。

pip install python-docx

安裝完成后,在代碼中導(dǎo)入。處理日期時(shí)間還需要datetime庫(kù):

from docx import Document
from datetime import datetime

讀取文檔屬性

Word文檔的屬性就像文件的“身份證”,記錄了標(biāo)題、作者、創(chuàng)建時(shí)間、修改次數(shù)等信息。這些信息藏在文檔的“Core Properties”部分,python-docx可以輕松讀取。

def get_doc_properties(doc_path):
    doc = Document(doc_path)
    core_props = doc.core_properties
    
    info = {
        "標(biāo)題": core_props.title,
        "作者": core_props.author,
        "分類": core_props.category,
        "狀態(tài)": core_props.content_status,
        "創(chuàng)建時(shí)間": core_props.created,
        "修改時(shí)間": core_props.modified,
        "最后保存者": core_props.last_modified_by,
        "修訂次數(shù)": core_props.revision
    }
    return info

props = get_doc_properties("項(xiàng)目報(bào)告.docx")
for key, value in props.items():
    print(f"{key}: {value}")

輸出結(jié)果類似于:

標(biāo)題: 2024年度項(xiàng)目總結(jié)
作者: 張三
創(chuàng)建時(shí)間: 2024-12-01 10:30:00
最后保存者: 李四
修訂次數(shù): 5

注意createdmodified返回的是datetime對(duì)象,可以直接用strftime格式化。

字?jǐn)?shù)統(tǒng)計(jì):主體內(nèi)容

字?jǐn)?shù)統(tǒng)計(jì)稍微復(fù)雜些。文檔里的文字分散在不同的地方:段落、表格、頁(yè)眉頁(yè)腳、文本框。先統(tǒng)計(jì)最常見(jiàn)的主體段落和表格。

def count_word_document(doc_path):
    doc = Document(doc_path)
    
    total_chars = 0
    
    for paragraph in doc.paragraphs:
        text = paragraph.text.strip()
        total_chars += len(text)
    
    for table in doc.tables:
        for row in table.rows:
            for cell in row.cells:
                text = cell.text.strip()
                total_chars += len(cell.text)
    
    return total_chars

word_count = count_word_document("項(xiàng)目報(bào)告.docx")
print(f"文檔總字符數(shù): {word_count}")

這里用len(text)統(tǒng)計(jì)字符數(shù)。對(duì)中文來(lái)說(shuō),每個(gè)漢字算1個(gè)字符。英文場(chǎng)景下可能需要按空格分詞來(lái)統(tǒng)計(jì)單詞數(shù),用len(text.split())即可。

進(jìn)階字?jǐn)?shù)統(tǒng)計(jì):包含頁(yè)眉頁(yè)腳

頁(yè)眉頁(yè)腳往往藏著重要信息,比如公司名稱、文檔版本。統(tǒng)計(jì)它們能讓字?jǐn)?shù)更完整。

def count_with_headers(doc_path):
    doc = Document(doc_path)
    total_chars = 0
    
    for paragraph in doc.paragraphs:
        total_chars += len(paragraph.text)
    
    for table in doc.tables:
        for row in table.rows:
            for cell in row.cells:
                total_chars += len(cell.text)
    
    for section in doc.sections:
        header = section.header
        for paragraph in header.paragraphs:
            total_chars += len(paragraph.text)
        
        footer = section.footer
        for paragraph in footer.paragraphs:
            total_chars += len(paragraph.text)
    
    return total_chars

通過(guò)doc.sections遍歷每個(gè)節(jié),再分別訪問(wèn)頁(yè)眉和頁(yè)腳的段落。

注意事項(xiàng)

段落與Run的區(qū)別python-docx把一段文字拆成多個(gè)Run對(duì)象,每個(gè)Run是一段樣式相同的連續(xù)文本。直接取paragraph.text會(huì)合并所有Run的文本,對(duì)字?jǐn)?shù)統(tǒng)計(jì)沒(méi)影響。但如果要統(tǒng)計(jì)帶格式的文字?jǐn)?shù)量,可以遍歷paragraph.runs分別處理。

性能問(wèn)題:幾十上百頁(yè)的文檔,遍歷所有表格和段落沒(méi)問(wèn)題。上千頁(yè)的超長(zhǎng)文檔,建議分頁(yè)讀取或換用更底層的lxml直接解析XML。

分頁(yè)統(tǒng)計(jì)python-docx本身不提供精確的頁(yè)數(shù)統(tǒng)計(jì)。如果依賴分頁(yè)符來(lái)分頁(yè),可以用paragraph.contains_page_break判斷:

def estimate_pages(doc_path):
    doc = Document(doc_path)
    page_breaks = sum(1 for p in doc.paragraphs if p.contains_page_break)
    return page_breaks + 1

這種方法只對(duì)手動(dòng)插入分頁(yè)符的文檔有效,純自動(dòng)排版的文檔會(huì)返回1。

完整示例:批量處理腳本

把上面內(nèi)容整合成一個(gè)批量處理腳本:

import os
from docx import Document
from datetime import datetime

def analyze_doc(doc_path):
    try:
        doc = Document(doc_path)
        props = doc.core_properties
        
        char_count = 0
        for para in doc.paragraphs:
            char_count += len(para.text)
        for table in doc.tables:
            for row in table.rows:
                for cell in row.cells:
                    char_count += len(cell.text)
        
        return {
            "文件": os.path.basename(doc_path),
            "字符數(shù)": char_count,
            "作者": props.author,
            "創(chuàng)建時(shí)間": props.created.strftime("%Y-%m-%d") if props.created else "未知"
        }
    except Exception as e:
        print(f"處理失敗 {doc_path}: {e}")
        return None

folder = "./reports"
for filename in os.listdir(folder):
    if filename.endswith(".docx"):
        full_path = os.path.join(folder, filename)
        result = analyze_doc(full_path)
        if result:
            print(f"{result['文件']} - {result['字符數(shù)']}字 - {result['作者']}")

跑一遍腳本,30份報(bào)告的字?jǐn)?shù)和作者信息就全部提取出來(lái)了。小李把結(jié)果導(dǎo)出到Excel,圓滿完成了任務(wù)。

總結(jié)

python-docx處理Word文檔屬性與字?jǐn)?shù)統(tǒng)計(jì),核心就三點(diǎn):doc.core_properties獲取元數(shù)據(jù)、遍歷doc.paragraphsdoc.tables統(tǒng)計(jì)文字、doc.sections訪問(wèn)頁(yè)眉頁(yè)腳。代碼量不大,卻能把重復(fù)勞動(dòng)徹底自動(dòng)化。下次領(lǐng)導(dǎo)再丟來(lái)一堆文檔,就知道怎么優(yōu)雅應(yīng)對(duì)了。

?到此這篇關(guān)于Python操作Word文檔屬性與字?jǐn)?shù)統(tǒng)計(jì)的方法詳解的文章就介紹到這了,更多相關(guān)Python操作Word內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python獲取時(shí)間戳的多種方法總結(jié)

    Python獲取時(shí)間戳的多種方法總結(jié)

    時(shí)間戳是一個(gè)表示日期和時(shí)間的數(shù)值,通常以秒為單位,在Python中,獲取時(shí)間戳是常見(jiàn)的任務(wù),用于記錄事件、計(jì)時(shí)操作、以及在各種應(yīng)用中跟蹤時(shí)間,本文將介紹多種獲取時(shí)間戳的方法,包括標(biāo)準(zhǔn)庫(kù)和第三方庫(kù)的方式,并提供示例代碼以幫助你更好地理解
    2023-11-11
  • Linux上安裝Python的PIL和Pillow庫(kù)處理圖片的實(shí)例教程

    Linux上安裝Python的PIL和Pillow庫(kù)處理圖片的實(shí)例教程

    這里我們來(lái)看一下在Linux上安裝Python的PIL和Pillow庫(kù)處理圖片的實(shí)例教程,包括一個(gè)使用Pillow庫(kù)實(shí)現(xiàn)批量轉(zhuǎn)換圖片的例子:
    2016-06-06
  • python+selenium實(shí)現(xiàn)163郵箱自動(dòng)登陸的方法

    python+selenium實(shí)現(xiàn)163郵箱自動(dòng)登陸的方法

    本篇文章主要介紹了python+selenium實(shí)現(xiàn)163郵箱自動(dòng)登陸的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • Python數(shù)據(jù)可視化的五種方法小結(jié)

    Python數(shù)據(jù)可視化的五種方法小結(jié)

    大家好,在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,數(shù)據(jù)可視化是挖掘數(shù)據(jù)價(jià)值的重要一環(huán),本文將介紹五種極為實(shí)用的高級(jí)可視化圖表,從原理到代碼實(shí)現(xiàn),一站式助力繪制數(shù)據(jù)圖,需要的朋友可以參考下
    2025-04-04
  • Pandas 中的 drop_duplicates()詳解

    Pandas 中的 drop_duplicates()詳解

    Pandas 中的 drop_duplicates() 函數(shù)用于從 DataFrame 中刪除重復(fù)的行,該函數(shù)有一些參數(shù),允許你進(jìn)行不同方式的重復(fù)行處理,本文給大家介紹Pandas 中的 drop_duplicates(),感興趣的朋友跟隨小編一起看看吧
    2023-09-09
  • Opencv+Python識(shí)別PCB板圖片的步驟

    Opencv+Python識(shí)別PCB板圖片的步驟

    這篇文章主要介紹了Opencv+Python識(shí)別PCB板圖片的步驟,幫助大家更好的理解和使用python進(jìn)行機(jī)器學(xué)習(xí),感興趣的朋友可以了解下
    2021-01-01
  • Python opencv實(shí)現(xiàn)人眼/人臉識(shí)別以及實(shí)時(shí)打碼處理

    Python opencv實(shí)現(xiàn)人眼/人臉識(shí)別以及實(shí)時(shí)打碼處理

    這篇文章主要為大家詳細(xì)介紹了Python opencv實(shí)現(xiàn)人眼、人臉識(shí)別,以及實(shí)時(shí)打碼處理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • 重溫Python基礎(chǔ)之列表操作

    重溫Python基礎(chǔ)之列表操作

    這篇文章主要帶大家來(lái)復(fù)習(xí)一下Python基礎(chǔ)中的列表操作,不知道各位還記得多少呢?文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下
    2022-11-11
  • 基于Python實(shí)現(xiàn)在控制臺(tái)查看excel的內(nèi)容

    基于Python實(shí)現(xiàn)在控制臺(tái)查看excel的內(nèi)容

    這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)在控制臺(tái)查看excel的內(nèi)容,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • 使用Python防止SQL注入攻擊的實(shí)現(xiàn)示例

    使用Python防止SQL注入攻擊的實(shí)現(xiàn)示例

    這篇文章主要介紹了使用Python防止SQL注入攻擊的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評(píng)論

开平市| 翁源县| 云梦县| 大兴区| 贡山| 富宁县| 菏泽市| 吉安市| 盐山县| 新安县| 锡林浩特市| 微山县| 宜兴市| 家居| 额尔古纳市| 泾阳县| 上饶县| 东港市| 五台县| 扬州市| 称多县| 沁水县| 丹东市| 贵溪市| 恩施市| 乳山市| 阳东县| 宣城市| 乐陵市| 淄博市| 巍山| 东阳市| 五台县| 普陀区| 喀喇沁旗| 山丹县| 湘潭县| 青冈县| 禄劝| 金乡县| 张北县|