两种方法实现批量修改Word文件页眉

首先是正经模式,装备python-docx:

python 复制代码
import os  
from docx import Document  
from docx.enum.text import WD_BREAK  
  
def replace_text_in_headers(folder_path, old_text, new_text):  
    # 遍历文件夹中的所有文件  
    for filename in os.listdir(folder_path):  
        if filename.endswith('.docx'):  
            # 构建完整的文件路径  
            file_path = os.path.join(folder_path, filename)  
            doc = Document(file_path)  
            # 遍历文档中的所有节  
            for section in doc.sections:  
                # 获取页眉  
                header = section.header  
                # 如果有页眉内容,则替换文本  
                if header:  
                    for paragraph in header.paragraphs:  
                        for run in paragraph.runs:  
                            # 检查并替换文本  
                            text = run.text.replace(old_text, new_text)  
                            run.text = text  
            # 保存修改后的文档  
            doc.save(file_path)  
            print(f'{filename} Done!')
  
folder_to_update = r"D:\header_test"  # 替换为你的文件夹路径  
old_header_text = '一二三四五'  # 要替换的文本  
new_header_text = '上山打老虎'  # 替换后的新文本  
replace_text_in_headers(folder_to_update, old_header_text, new_header_text)
  

然后是裸奔模式:(加特林的火力固然豪横,但榔头加大棒实在精彩ヾ(:3ノシヾ)ノシ

基本原理看这里:

Word docx文件重命名为zip文件,解压后直接查看和编辑

python 复制代码
import zipfile  
import os

# 解压后文件夹压缩回zip
def zip_folder(folder_path, zip_path):  
    with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf:  
        for root, dirs, files in os.walk(folder_path):  # 遍历folder_path文件夹及其所有子文件夹 
            for file in files:  
                file_path = os.path.join(root, file)  # 构建文件的完整路径  
                zipf.write(file_path, file_path[len(folder_path)+1:])  # 将文件添加到zip文件中
# 恢复文件为.docx
def re_name(path):
    old_name = path
    new_name = path[:-4]+'.docx'
    os.rename(old_name, new_name)  
    return new_name
  
fname=[]
# 遍历folder_path文件夹及其所有子文件夹,查找所有.docx文件 
folder_path = r"D:\header_test"  # 替换为你的文件夹路径  
for root,dirs,files in os.walk(folder_path):
    for file in files:
        if file.endswith('.docx'):
            fff=os.path.join(root,file)
            fname.append(fff)
# 对于每个找到的.docx文件 
for file_path in fname:
    # 将.docx文件改名为.zip文件  
    nzip_path=file_path.replace('.docx','.zip')
    os.rename(file_path,nzip_path)
    # 解压.zip文件到新的文件夹  
    new_zip_folder=nzip_path[:-4]
    with zipfile.ZipFile(nzip_path, 'r') as zip_ref:  
        zip_ref.extractall(new_zip_folder)  
    # 修改解压后的文件夹中的header1.xml文件
    header1=new_zip_folder+'\\word\\header1.xml'
    #改header1.xml,即页眉文件
    with open(header1, 'r+',encoding='utf-8') as file:  
        content = file.read()
        header=content.replace('老虎没打着','打到小松鼠')
        file.seek(0)  # 将文件指针移回文件开头,以便写入
        file.write(header)  # 将修改后的内容写回文件 
        file.truncate()  # 删除多余的内容,确保文件大小正确  
    # 获取文件名
    n=new_zip_folder.split('\\')[-1]
    target_zip_path = f"D:\\header_changed\\{n}.zip"  # 替换为你想要保存压缩文件的路径  
    # 将修改后的文件夹重新压缩为.zip文件  
    zip_folder(new_zip_folder, target_zip_path)
    # 将.zip文件恢复为.docx格式  
    new_docx=re_name(target_zip_path)
    # 恢复原文件夹中的.docx文件
    os.rename(nzip_path,file_path)
相关推荐
哆啦A梦的口袋呀6 分钟前
基于Python学习《Head First设计模式》第六章 命令模式
python·学习·设计模式
努力搬砖的咸鱼8 分钟前
从零开始搭建 Pytest 测试框架(Python 3.8 + PyCharm 版)
python·pycharm·pytest
Calvex10 分钟前
PyCharm集成Conda环境
python·pycharm·conda
一千柯橘22 分钟前
python 项目搭建(类比 node 来学习)
python
sduwcgg27 分钟前
python的numpy的MKL加速
开发语言·python·numpy
大模型真好玩28 分钟前
可视化神器WandB,大模型训练的必备工具!
人工智能·python·mcp
东方佑30 分钟前
使用 Python 自动化 Word 文档样式复制与内容生成
python·自动化·word
钢铁男儿36 分钟前
Python 接口:从协议到抽象基 类(定义并使用一个抽象基类)
开发语言·python
databook44 分钟前
当机器学习遇见压缩感知:用少量数据重建完整世界
python·机器学习·scikit-learn
M1A11 小时前
Python数据结构操作:全面解析与实践
后端·python