Python Word案例如何读取Word文档

wen python案例 28

本文目录导读:

Python Word案例如何读取Word文档

  1. 使用 python-docx 库(推荐)
  2. 高级功能:提取特定格式内容
  3. 读取加密的Word文档
  4. 实用示例:批量处理Word文档
  5. 处理.docx和.doc格式
  6. 安装建议
  7. 注意事项

我来介绍几种在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       # 数据处理

注意事项

  1. 版本兼容性:python-docx主要支持.docx格式
  2. 编码问题:中文文档通常没问题,但有特殊字符时注意编码
  3. 内存管理:大文档建议分块处理
  4. 权限问题:确保有文件读取权限

这些方法应该能满足大多数Word文档读取需求,如果遇到特殊格式的文档,建议先用Microsoft Word另存为标准格式后再处理。

抱歉,评论功能暂时关闭!