使用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
相关产品推荐
相关产品推荐

