两种方法实现批量修改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)
相关推荐
-曾牛29 分钟前
企业级AI开发利器:Spring AI框架深度解析与实战
java·人工智能·python·spring·ai·rag·大模型应用
Light601 小时前
智启未来:深度解析Python Transformers库及其应用场景
开发语言·python·深度学习·自然语言处理·预训练模型·transformers库 |·|应用场景
坤岭1 小时前
Python基础
python
一个天蝎座 白勺 程序猿1 小时前
Python爬虫(5)静态页面抓取实战:requests库请求头配置与反反爬策略详解
开发语言·爬虫·python
一眼青苔1 小时前
python环境使用conda,conda如何升级默认的python版本
开发语言·python·conda
橘猫云计算机设计1 小时前
net+MySQL中小民营企业安全生产管理系统(源码+lw+部署文档+讲解),源码可白嫖!
数据库·后端·爬虫·python·mysql·django·毕业设计
Y1nhl1 小时前
力扣hot100_链表(3)_python版本
python·算法·leetcode·链表·职场和发展
振宇i1 小时前
Java 富文本转word
java·word·富文本·docx4j
sduwcgg1 小时前
kaggle配置
人工智能·python·机器学习
__lost2 小时前
Python图像变清晰与锐化,调整对比度,高斯滤波除躁,卷积锐化,中值滤波钝化,神经网络变清晰
python·opencv·计算机视觉