需求
將文件夾中xml文件的include、preview以及cylinder中的url都改爲相對路徑
層級目錄是一個文件夾包含很多子文件夾,子文件夾中有很多文件,其中包括xml文件,需要進行修改的就是此處的tour.xml
代碼部分
import os
import xml.etree.ElementTree as ET
def get_xml(path):
"""
遍歷文件夾,獲取每個文件夾下的xml文件,
:param path: 傳遞文件夾所在路徑
:return: 返回一個xml_list(每個xml的絕對路徑,用於後面解析xml文件)
"""
xml_list = []
files = os.listdir(path) # 路徑下所有的文件夾
for file_datas in files: # 遍歷文件夾
# print(file_datas)
file_path = "\\"+file_datas # 拼接路徑
file_data = os.listdir(path+file_path) # 每個文件夾下的所有文件目錄
for xml_file in file_data: # 遍歷目錄,爲xml文件的加入到xml列表中去
if xml_file.endswith("xml"):
xml_file_path = path+file_path+"\\"+xml_file # 拼接最終的xml絕對路徑
xml_list.append(xml_file_path)
return xml_list
def update_xml(path):
"""
修改每個xml文件
:param path: 傳遞文件夾所在路徑
:return:
"""
xml_list = get_xml(path) # 獲取xml_list
for xml_file_path in xml_list: # 遍歷獲取到的xml文件並修改
# print(xml_file_path)
# 1.解析xml文件
tree = ET.parse(xml_file_path)
root = tree.getroot()
# 2.得到新的include的url爲../skin/defaultskin.xml和../skin/flatpano_setup.xml
for include in root.findall("include"):
include_url = include.get("url") # 獲取url的value
include_new_url = "../" + include_url # 定義新的url內容
include.set("url", include_new_url) # 修改inclue元素的url爲新的url
# print(include_new_url)
# 3.得到新的preview的url爲preview.jpg
preview = root.findall("preview")[0]
preview_url = preview.get("url") # 獲取url的value
preview_new_url = preview_url.split("/")[1] # 字符串分割截取
preview.set("url", preview_new_url) # 修改preview元素的url爲新的url
# print(preview_new_url)
# 4.得到新的cylinder的url爲l4/%v/l4_%v_%h.jpg格式
# root.findall("image/level/cylinder")可以替換爲root.iter("cylinder")
for cylinder in root.findall("image/level/cylinder"):
cylinder_url = cylinder.get("url") # 獲取url的value
cylinder_new_url = cylinder_url.split(".tiles/")[1] # 字符串分割截取
cylinder.set("url", cylinder_new_url) # 修改cylinder元素的url爲新的url
# print(cylinder_new_url)
tree.write(xml_file_path,encoding="utf-8",xml_declaration=True)
print("修改成功")
if __name__ == '__main__':
update_xml("C:\\Users\\PC\\Desktop\\rubbingTile")
執行結果
打開修改後的xml文件:
使用xml相關類修改成功後,原本xml文件中的註釋會清除,不知道啥原因,也未找到解決方法,歡迎大神指教~~~