Python批量翻译XML指定元素后回写原文件问题求助
批量翻译XML指定标签内容并回写的解决方法
原代码存在的核心问题
- 缩进逻辑错误:标签遍历、翻译、写入的代码块没有嵌套在文件遍历循环内,只会处理最后一个读取到的文件
- 仅处理了
body标签,没有覆盖需求中的headline标签 - 直接将
translator.translate返回的对象赋值给了标签文本,没有取翻译结果的文本属性 - 写入文件时未指定编码,容易出现乱码、XML头丢失的问题
- 路径匹配规则未限制XML后缀,可能读取到文件夹内的非XML文件引发解析错误
修正后的可运行代码
import xml.etree.ElementTree as ET from googletrans import Translator import glob # 用原始字符串避免路径转义问题,只匹配XML后缀文件 path = r"D:\Counter\*.xml" translator = Translator() # 只初始化一次翻译对象即可,不需要每个文件都新建 file_list = glob.glob(path) print(f"待处理文件列表:{file_list}") for file in file_list: mytree = ET.parse(file) myroot = mytree.getroot() # 同时遍历处理headline和body两个标签 for tag_name in ['headline', 'body']: for element in myroot.iter(tag_name): # 跳过空内容的标签避免报错 if element.text: # 翻译后取text属性获取纯文本结果,指定源语言为乌尔都语可提升翻译准确率 result = translator.translate(element.text, dest='en', src='ur') element.text = result.text # 写入时指定UTF-8编码,保留XML声明 mytree.write(file, encoding='utf-8', xml_declaration=True) print(f"{file} 处理完成")
关键修改说明
- 把翻译对象的初始化移到了循环外,减少不必要的实例创建开销
- 嵌套了标签遍历逻辑,保证每个文件的两个目标标签都能被处理
- 增加了空内容判断,避免标签无文本时翻译报错
- 写入时增加了
encoding='utf-8'和xml_declaration=True参数,保证原文件的编码和XML头格式正确 - 路径匹配限制为XML后缀,避免非XML文件解析错误
内容的提问来源于stack exchange,提问作者Code Logic
相关产品推荐
相关产品推荐

