Python操作Word文檔屬性與字數統(tǒng)計的方法詳解
?小李是剛入職場的行政助理,這天領導扔給他30份項目報告,要求統(tǒng)計每份報告的字數,還要提取創(chuàng)建時間和最后修改作者。手動打開一個個Word文檔復制粘貼,顯然不現實,小李決定用Python試試。
準備工作:安裝與導入
操作Word文檔最常用的庫是python-docx。它只支持.docx格式,老舊的.doc格式需要先轉換。
pip install python-docx
安裝完成后,在代碼中導入。處理日期時間還需要datetime庫:
from docx import Document from datetime import datetime
讀取文檔屬性
Word文檔的屬性就像文件的“身份證”,記錄了標題、作者、創(chuàng)建時間、修改次數等信息。這些信息藏在文檔的“Core Properties”部分,python-docx可以輕松讀取。
def get_doc_properties(doc_path):
doc = Document(doc_path)
core_props = doc.core_properties
info = {
"標題": core_props.title,
"作者": core_props.author,
"分類": core_props.category,
"狀態(tài)": core_props.content_status,
"創(chuàng)建時間": core_props.created,
"修改時間": core_props.modified,
"最后保存者": core_props.last_modified_by,
"修訂次數": core_props.revision
}
return info
props = get_doc_properties("項目報告.docx")
for key, value in props.items():
print(f"{key}: {value}")
輸出結果類似于:
標題: 2024年度項目總結
作者: 張三
創(chuàng)建時間: 2024-12-01 10:30:00
最后保存者: 李四
修訂次數: 5
注意created和modified返回的是datetime對象,可以直接用strftime格式化。
字數統(tǒng)計:主體內容
字數統(tǒng)計稍微復雜些。文檔里的文字分散在不同的地方:段落、表格、頁眉頁腳、文本框。先統(tǒng)計最常見的主體段落和表格。
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("項目報告.docx")
print(f"文檔總字符數: {word_count}")
這里用len(text)統(tǒng)計字符數。對中文來說,每個漢字算1個字符。英文場景下可能需要按空格分詞來統(tǒng)計單詞數,用len(text.split())即可。
進階字數統(tǒng)計:包含頁眉頁腳
頁眉頁腳往往藏著重要信息,比如公司名稱、文檔版本。統(tǒng)計它們能讓字數更完整。
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
通過doc.sections遍歷每個節(jié),再分別訪問頁眉和頁腳的段落。
注意事項
段落與Run的區(qū)別:python-docx把一段文字拆成多個Run對象,每個Run是一段樣式相同的連續(xù)文本。直接取paragraph.text會合并所有Run的文本,對字數統(tǒng)計沒影響。但如果要統(tǒng)計帶格式的文字數量,可以遍歷paragraph.runs分別處理。
性能問題:幾十上百頁的文檔,遍歷所有表格和段落沒問題。上千頁的超長文檔,建議分頁讀取或換用更底層的lxml直接解析XML。
分頁統(tǒng)計:python-docx本身不提供精確的頁數統(tǒng)計。如果依賴分頁符來分頁,可以用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
這種方法只對手動插入分頁符的文檔有效,純自動排版的文檔會返回1。
完整示例:批量處理腳本
把上面內容整合成一個批量處理腳本:
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),
"字符數": char_count,
"作者": props.author,
"創(chuàng)建時間": 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['字符數']}字 - {result['作者']}")
跑一遍腳本,30份報告的字數和作者信息就全部提取出來了。小李把結果導出到Excel,圓滿完成了任務。
總結
用python-docx處理Word文檔屬性與字數統(tǒng)計,核心就三點:doc.core_properties獲取元數據、遍歷doc.paragraphs和doc.tables統(tǒng)計文字、doc.sections訪問頁眉頁腳。代碼量不大,卻能把重復勞動徹底自動化。下次領導再丟來一堆文檔,就知道怎么優(yōu)雅應對了。
?到此這篇關于Python操作Word文檔屬性與字數統(tǒng)計的方法詳解的文章就介紹到這了,更多相關Python操作Word內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Linux上安裝Python的PIL和Pillow庫處理圖片的實例教程
這里我們來看一下在Linux上安裝Python的PIL和Pillow庫處理圖片的實例教程,包括一個使用Pillow庫實現批量轉換圖片的例子:2016-06-06
Python opencv實現人眼/人臉識別以及實時打碼處理
這篇文章主要為大家詳細介紹了Python opencv實現人眼、人臉識別,以及實時打碼處理,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-04-04

