两种方法实现批量修改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)
相关推荐
R-G-B25 分钟前
【P38 6】OpenCV Python——图片的运算(算术运算、逻辑运算)加法add、subtract减法、乘法multiply、除法divide
人工智能·python·opencv·图片的运算·图片加法add·图片subtract减法·图片乘法multiply
数据智能老司机32 分钟前
MCP 实战——全局视角:为什么 MCP 将成为 AI 的颠覆者
python·llm·mcp
在星空下38 分钟前
Fastapi-Vue3-Admin
前端·python·fastapi
cxyll12341 小时前
从接口自动化测试框架设计到开发(三)主流程封装、返回数据写入excel
前端·python·excel
Kyln.Wu1 小时前
【python实用小脚本-190】Python一键删除PDF任意页:输入页码秒出干净文件——再也不用在线裁剪排队
服务器·python·pdf
九章云极AladdinEdu2 小时前
Scikit-learn通关秘籍:从鸢尾花分类到房价预测
人工智能·python·机器学习·分类·scikit-learn·gpu算力
抠头专注python环境配置2 小时前
Pytorch GPU版本安装保姆级教程
pytorch·python·深度学习·conda
小磊哥er3 小时前
【办公自动化】如何使用Python自动化处理PDF文档?
python
大模型真好玩3 小时前
DeepSeek更新!速览DeepSeek V3.1新特性
人工智能·python·mcp
CF14年老兵3 小时前
Python参数传递:从混沌到明晰的魔法之旅
后端·python·trae