You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Aspose.Words Python批量对比.docx文件仅生成一个结果的问题

问题排查与修复:Aspose.Words批量对比仅生成一个文件

核心问题1:循环迭代逻辑错误

你的主脚本中,for i, j in new_docs, old_docs:的写法是错误的——这会把两个列表当成一个元组的两个元素来迭代,实际只会执行一次循环(仅处理两组文档的第一个元素),导致后续文档根本没被对比。

修复方法

用zip()函数配对新旧文档列表,确保每组对应文档都能被遍历:

# 修正后的循环代码
for i, j in zip(new_docs, old_docs):
    doc = aw.Document(i)
    doc1 = aw.Document(j)
    print(doc)
    print(doc1)
    compare_doc(doc, doc1, i)  # 新增传入新文档文件名,用于生成唯一保存名

核心问题2:保存文件名重复覆盖

对比脚本中,计数器i = 0定义在if x > 0代码块内部,每次进入都会重置为0,导致所有有差异的文档都被保存为compared0.docx,后续文件直接覆盖前面的,最终只留下一个文件。

修复方案(二选一)

方案1:基于原文件名生成唯一保存名(更直观)

从新文档文件名中提取标识,生成对应对比文件名,避免覆盖且方便识别:

# 对比脚本中修改compare_doc函数
def compare_doc(doc, doc1, new_doc_name):
    doc.compare(doc1, "user", date.today(), options)
    x = doc.revisions.count
    print(x)
    if x > 0:
        # 将"_new.docx"替换为"_compared.docx"生成保存名
        save_name = new_doc_name.replace("_new.docx", "_compared.docx")
        print("Test")
        doc.save(save_name)
    else:
        print("Documents are equal")

方案2:使用全局计数器

把计数器定义在函数外部,每次保存后递增:

# 对比脚本中修改
compare_counter = 0  # 定义全局计数器

def compare_doc(doc, doc1):
    global compare_counter
    doc.compare(doc1, "user", date.today(), options)
    x = doc.revisions.count
    print(x)
    if x > 0:
        print("Test")
        doc.save(f"compared{compare_counter}.docx")
        compare_counter += 1
    else:
        print("Documents are equal")

完整修正后代码

主脚本

import aspose.words as aw
from datetime import date
from compare_doc import compare_doc

docs = ["Trial Division - Civil - affidavit_new.docx", "Trial Division - Civil - affidavit_old.docx", "test_doc_new.docx", "test_doc_old.docx"]
new_docs = []
old_docs = []

# 拆分新旧文档列表
for i in docs:
    if "old" in i:
        old_docs.append(i)
    if "new" in i:
        new_docs.append(i)

# 遍历配对文档并对比
for i, j in zip(new_docs, old_docs):
    doc = aw.Document(i)
    doc1 = aw.Document(j)
    print(doc)
    print(doc1)
    compare_doc(doc, doc1, i)

对比脚本

import aspose.words as aw
from datetime import date

# 设置对比选项
options = aw.comparing.CompareOptions()
options.ignore_formatting = True
options.ignore_headers_and_footers = True
options.ignore_case_changes = True
options.ignore_tables = True
options.ignore_fields = True
options.ignore_comments = True
options.ignore_textboxes = True
options.ignore_footnotes = True

def compare_doc(doc, doc1, new_doc_name):
    doc.compare(doc1, "user", date.today(), options)
    x = doc.revisions.count
    print(x)
    if x > 0:
        save_name = new_doc_name.replace("_new.docx", "_compared.docx")
        print(f"正在保存对比结果:{save_name}")
        doc.save(save_name)
    else:
        print("文档无差异")

内容的提问来源于stack exchange,提问作者Connor Davidson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 09:15:26