本文目录导读:

我来介绍几种在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另存为标准格式后再处理。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播