首先是正经模式,装备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)