如何用googletrans翻译Python解析的XML文件中ITEXT元素的CH属性文本?
问题解决:XML文件修改后无法保存及翻译结果处理错误
核心问题分析
你的代码存在几个关键错误导致修改不生效:
- 未执行XML写入操作:仅修改了内存中的XML树,没有将变更同步到文件。
- 翻译结果处理错误:
googletrans的translate()方法返回的是翻译对象,不是直接字符串,需提取其text属性。 - 资源浪费:循环内重复创建
Translator实例,既低效又可能触发API限制。 - 文件模式问题:
r+模式下直接读写易导致内容混乱,建议分开处理读取和写入。
修正后的代码
from googletrans import Translator import xml.etree.ElementTree as ET # 初始化一次翻译器实例,避免重复创建 translator = Translator() # 读取XML文件 tree = ET.parse("c:/fir/file.sla") root = tree.getroot() # 遍历所有ITEXT元素并处理 for elem in root.iter("ITEXT"): txtcourant = elem.get("CH") if txtcourant: # 跳过空文本,避免翻译API报错 # 执行翻译并提取文本结果 txtraduit = translator.translate(dest="fr", src="en", text=txtcourant).text # 更新CH属性 elem.attrib["CH"] = txtraduit # 将修改后的XML写入文件(可指定原路径覆盖,或新路径保存) tree.write("c:/fir/file_modified.sla", encoding="UTF-8", xml_declaration=True)
关键修改说明
- 添加写入操作:通过
tree.write()将内存中的修改同步到文件,指定encoding="UTF-8"和xml_declaration=True保证输出格式与原文件一致。 - 正确处理翻译结果:使用
.text属性从翻译对象中提取实际字符串,而非直接赋值对象。 - 复用翻译器:将
Translator()实例创建移到循环外,减少资源消耗和API调用风险。 - 空值防护:增加
if txtcourant:判断,避免空文本传入翻译API导致异常。 - 优化文件处理:直接用
ET.parse()读取文件,避免手动打开文件的模式冲突;若需覆盖原文件,可先读取完成后关闭,再执行写入操作。
内容的提问来源于stack exchange,提问作者JB B
相关产品推荐
相关产品推荐

