如何批量读取文件夹中XML文件并将.tif扩展名替换为.jpg
批量替换XML文件中标签的.tif扩展名为.jpg
问题背景
需处理指定文件夹下所有XML文件,将<filename>标签内的.tif扩展名替换为.jpg,例如把000000000002.tif修改为000000000002.jpg。此前用Notepad++未完成需求,现基于提供的代码片段完善解决方案。
XML示例
<?xml version="1.0"?> <annotation> <filename>000000000002.tif</filename> <source> <annotation>ESRI ArcGIS Pro</annotation> </source> <size> <width>128</width> <height>128</height> <depth>3</depth> </size> <object> <name>1</name> <bndbox> <xmin>85.82</xmin> <ymin>0.00</ymin> <xmax>128.00</xmax> <ymax>11.95</ymax> </bndbox> </object> <object> <name>1</name> <bndbox> <xmin>42.56</xmin> <ymin>0.00</ymin> <xmax>85.88</xmax> <ymax>6.05</ymax> </bndbox> </object> </annotation>
完整Python解决方案
以下是实现批量处理的完整代码:
import xml.etree.ElementTree as ET import os # 替换为你的XML文件夹实际路径 target_folder = "your/xml/folder/path" # 遍历文件夹下所有XML文件 for file_name in os.listdir(target_folder): if file_name.endswith(".xml"): file_path = os.path.join(target_folder, file_name) # 解析XML文件 tree = ET.parse(file_path) root = tree.getroot() # 查找所有<filename>标签并替换扩展名 for filename_tag in root.findall("filename"): original_text = filename_tag.text if original_text and original_text.endswith(".tif"): filename_tag.text = original_text.replace(".tif", ".jpg") # 保存修改后的文件(直接覆盖原文件,需备份可自行添加复制逻辑) tree.write(file_path, encoding="utf-8", xml_declaration=True) print("所有XML文件处理完成")
代码说明
os.listdir(target_folder):遍历目标文件夹下的所有文件,筛选出XML格式文件ET.parse(file_path):直接解析XML文件,比读取文本再解析更高效简洁root.findall("filename"):精准定位所有<filename>标签;若标签嵌套在其他节点下,可改用root.findall(".//filename")递归查找所有层级的该标签tree.write(...):保存修改后的文件,指定编码和XML声明,避免乱码或格式丢失
内容的提问来源于stack exchange,提问作者salih muhammad
相关产品推荐
相关产品推荐

