本文目录导读:

我来介绍几种在Python中读取Word文档的常用方法:
使用 python-docx 库(推荐)
安装
pip install python-docx
读取Word文档内容
from docx import Document
def read_word_doc(file_path):
"""读取Word文档的基本内容"""
doc = Document(file_path)
# 读取所有段落
print("=== 段落内容 ===")
for i, paragraph in enumerate(doc.paragraphs):
if paragraph.text.strip(): # 跳过空段落
print(f"段落 {i+1}: {paragraph.text}")
# 读取表格内容
print("\n=== 表格内容 ===")
for table_idx, table in enumerate(doc.tables):
print(f"\n表格 {table_idx + 1}:")
for row_idx, row in enumerate(table.rows):
row_data = [cell.text for cell in row.cells]
print(f"行 {row_idx + 1}: {' | '.join(row_data)}")
# 使用示例
read_word_doc("example.docx")
读取带格式的内容
from docx import Document
from docx.shared import Pt, RGBColor
def read_formatted_content(file_path):
"""读取带格式的Word文档内容"""
doc = Document(file_path)
for para in doc.paragraphs:
if para.text.strip():
# 获取段落样式
print(f"段落样式: {para.style.name}")
# 遍历段落中的每个run(格式相同的文本片段)
for run in para.runs:
text = run.text
# 字体属性
font = run.font
print(f" 文本: {text}")
print(f" 字体: {font.name}, 大小: {font.size}")
print(f" 加粗: {run.bold}, 斜体: {run.italic}")
print(f" 颜色: {font.color.rgb if font.color and font.color.rgb else '默认'}")
print("-" * 30)
高级功能:提取特定格式内容
from docx import Document
import re
def extract_specific_content(file_path):
"""提取特定格式的内容"""
doc = Document(file_path)
# 提取标题
print("=== 标题 ===")
for para in doc.paragraphs:
if para.style.name.startswith('Heading'):
level = para.style.name.replace('Heading ', '')
print(f"级别 {level}: {para.text}")
# 提取图片信息
print("\n=== 图片信息 ===")
for shape in doc.inline_shapes:
if shape.type == 3: # 图片类型
print(f"图片: {shape.width} x {shape.height}")
# 提取超链接
print("\n=== 超链接 ===")
for para in doc.paragraphs:
for run in para.runs:
if run.hyperlink:
print(f"链接文本: {run.text}")
print(f"链接地址: {run.hyperlink.address}")
# 搜索特定内容
def search_in_doc(file_path, keyword):
"""在文档中搜索关键词"""
doc = Document(file_path)
results = []
for para_idx, paragraph in enumerate(doc.paragraphs):
if keyword.lower() in paragraph.text.lower():
results.append({
'段落索引': para_idx,
'内容': paragraph.text[:100] + '...' if len(paragraph.text) > 100 else paragraph.text
})
print(f'找到 {len(results)} 处包含 "{keyword}" 的内容:')
for result in results:
print(f" 段落 {result['段落索引']}: {result['内容']}")
return results
读取加密的Word文档
from docx import Document
def read_protected_doc(file_path, password=None):
"""尝试读取加密/受保护的Word文档"""
try:
# 尝试直接读取
doc = Document(file_path)
return doc
except Exception as e:
print(f"直接读取失败: {e}")
print("文档可能受密码保护或损坏")
# 对于简单的只读保护,可以使用VBA脚本处理
# 但对于真正的密码保护,需要特殊工具
return None
实用示例:批量处理Word文档
import os
from pathlib import Path
from docx import Document
import pandas as pd
def batch_process_word_files(folder_path):
"""批量处理Word文档并导出为Excel"""
data = []
# 遍历文件夹中的所有Word文档
for file_path in Path(folder_path).glob("*.docx"):
doc = Document(str(file_path))
doc_data = {
'文件名': file_path.name,
'段落数': len(doc.paragraphs),
'表格数': len(doc.tables),
'总字符数': sum(len(p.text) for p in doc.paragraphs),
}
data.append(doc_data)
# 创建DataFrame并保存为Excel
df = pd.DataFrame(data)
df.to_excel('word_documents_summary.xlsx', index=False)
print("已生成统计报告:word_documents_summary.xlsx")
处理.docx和.doc格式
import subprocess
import os
def read_doc_file(file_path):
"""处理.doc格式(旧版Word)"""
if file_path.endswith('.docx'):
# 直接使用python-docx
from docx import Document
return Document(file_path)
elif file_path.endswith('.doc'):
# .doc格式需要转换为.docx
try:
# 使用LibreOffice/OpenOffice转换
output_path = file_path.replace('.doc', '_converted.docx')
subprocess.run([
'libreoffice',
'--headless',
'--convert-to', 'docx',
file_path,
'--outdir', os.path.dirname(file_path)
], check=True)
from docx import Document
doc = Document(output_path)
return doc
except Exception as e:
print(f"转换失败: {e}")
return None
安装建议
# 基础安装 pip install python-docx # 如需更高级功能 pip install python-pptx # 处理PPT pip install openpyxl # 处理Excel pip install pandas # 数据处理
注意事项
- 版本兼容性:python-docx主要支持.docx格式
- 编码问题:中文文档通常没问题,但有特殊字符时注意编码
- 内存管理:大文档建议分块处理
- 权限问题:确保有文件读取权限
这些方法应该能满足大多数Word文档读取需求,如果遇到特殊格式的文档,建议先用Microsoft Word另存为标准格式后再处理。