我的知识记录

Python Word文档属性元信息修改:批量改作者

用python-docx批量修改Word文档的作者、标题、主题、公司等元信息,清理文档属性里的隐私信息,或统一批量填写公司信息,防止泄露原作者。

场景痛点

公司发出去的标书、方案,文件右键属性里还留着原作者的个人姓名、单位、上次修改时间,等于把内部信息漏出去了。要么一个个文件右键改,要么用Python批量遍历整个文件夹,把作者、单位、标题、创建时间统一成公司规范。

用到的库

pip install python-docx

完整代码

# -*- coding: utf-8 -*-
"""
批量读取 / 修改 Word 文档属性(元数据)
"""
from pathlib import Path
from datetime import datetime
from docx import Document


def read_metadata(docx_path: Path) -> dict:
"""读取文档核心属性"""
doc = Document(str(docx_path))
cp = doc.core_properties
return {
"文件名": docx_path.name,
"作者": cp.author,
"最后修改人": cp.last_modified_by,
"标题": cp.title,
"主题": cp.subject,
"关键词": cp.keywords,
"备注": cp.comments,
"类别": cp.category,
"公司(自定义)": getattr(cp, "company", ""),  # 公司在app属性里,python-docx不直接暴露
"创建时间": str(cp.created) if cp.created else "",
"修改时间": str(cp.modified) if cp.modified else "",
}


def write_metadata(docx_path: Path, output_path: Path, new_props: dict):
"""批量写入新元数据"""
doc = Document(str(docx_path))
cp = doc.core_properties

if "author" in new_props:
cp.author = new_props["author"]
if "last_modified_by" in new_props:
cp.last_modified_by = new_props["last_modified_by"]
if "title" in new_props:
cp.title = new_props["title"]
if "subject" in new_props:
cp.subject = new_props["subject"]
if "keywords" in new_props:
cp.keywords = new_props["keywords"]
if "comments" in new_props:
cp.comments = new_props["comments"]
if "category" in new_props:
cp.category = new_props["category"]

# 统一改成公司当前时间,抹掉原始创建/修改痕迹
now = datetime.now()
cp.created = now
cp.modified = now

doc.save(str(output_path))


def batch_clean(input_dir, output_dir, company_name="XX科技有限公司"):
input_dir = Path(input_dir)
output_dir = Path(output_dir)
output_dir.mkdir(parents=True, exist_ok=True)

docx_files = [f for f in input_dir.glob("*.docx") if not f.name.startswith("~$")]
print(f"共 {len(docx_files)} 个文档待清理元数据")

for docx_file in docx_files:
# 先看一下原始属性
old = read_metadata(docx_file)
print(f"\n处理:{old['文件名']}")
print(f"  原作者:{old['作者']}  ->  新作者:{company_name}")

write_metadata(
docx_file,
output_dir / docx_file.name,
new_props={
"author": company_name,
"last_modified_by": company_name,
"title": docx_file.stem,
"subject": "公司文档",
"keywords": "公司文档,自动化",
"comments": "",
"category": "商务文档",
},
)

print(f"\n全部完成,输出目录:{output_dir}")


if __name__ == "__main__":
batch_clean(
input_dir="./word_docs",
output_dir="./cleaned",
company_name="宝鸡卓亚技术服务部",
)

代码讲解

doc.core_properties 是python-docx暴露的核心属性集合,对应Word"文件-信息-属性"里的字段。常用的有 authorlast_modified_bytitlesubjectkeywordscommentscategory,还有时间字段 createdmodifiedrevision

write_metadata() 只在传入字典里包含对应key时才修改,避免误清空。最后统一把 createdmodified 改成当前时间,这样原作者的编辑时间线就被抹掉了。

公司名(company)属于App属性,存在docProps/app.xml里,python-docx的 core_properties 不直接暴露。要改公司名需要直接操作 doc.part.package 下的app.xml,本篇先保留常见字段,公司名可以打开Word手动改一次模板。

运行结果

cleaned 目录里每个文档右键-属性-详细信息,作者、最后保存者都变成了公司名,创建和修改时间变成当前运行脚本的时间。控制台打印每个文件的原作者和新作者对照,方便核对有没有漏改。

注意事项

  • 元数据清理不等于内容清理,正文里、页眉页脚里的署名还得另查。
  • 修改 created/modified 后,Word打开时不会再触发"更新域"提示,但Windows资源管理器显示的"创建时间"是文件系统时间,和文档内部创建时间是两回事。
  • 想彻底抹掉所有个人痕迹,可以把 cp.author 设成空字符串,或者用 pip install exiftool 命令行工具做更彻底的清理。
  • python-docx 保存时会重新打包docx,有些第三方插件写进去的自定义属性可能丢失。

Python Word文档属性元信息修改:批量改作者

标签:

更新时间:2026-09-14 21:45:52

上一篇:Python Word设置页面边距纸张大小教程

下一篇:Python Word合并多个文档为一个教程