批量查找修改xml文件内容并更改名称-python
程序员文章站
2022-04-18 19:53:21
...
最近处理一些数据量小的内容,太喜欢用python了,语法简单,随便写一写都不容易出错,对不要求实时性的的内容就很友好,真香。
本文针对批量修改代码进行记录,很简单,删掉了针对项目的主要内容。
导入文件
首先将文件夹中的所有文件存到数字中:
def file_list(path): # 传入存储的list
f_list = os.listdir(path)
# 将文件按首字母进行排序
f_list.sort()
return f_list
需要将文件夹数组加上一个路径,这样才能读取到文件中的信息:
# 将生成 xml 命名 (路径+文件名)
def get_pathname(filename):
# file_path为导入filename的路径
filename = file_path + filename
return filename
修改xml文件内容
修改内容需要先在文件中找到你要修改的内容位置。
打开文件语句:
# 打开path文件夹中的xml文件
all_file = file_list(path)
# 解析成dom
dom = xml.dom.minidom.parse(get_pathname(all_file[i]))
xml代码片段内容如下:
<TrafficControl>
<Player>
<Description Driver="DefaultDriver" Control="external" AdaptDriverToVehicleType="true" Type="AlfaRomeo_Brera_10_BiancoSpino" Name="HV"/>
<Init>
<Speed Value="2.7777777777777777e+00"/>
<PosRoute/>
<PathRef StartS="0.0000000000000000e+00" EndAction="continue" TargetS="9.4247779607693792e+02" StartLane="-1" PathId="1"/>
</Init>
</Player>
</TrafficControl>
需要找到Description的Name属性为"HV"的Player,并将该Player下面的Speed标签属性值更改。
# 修改speed的value数值
def change_speed(hv_speed):
root = dom.documentElement
# 先找到所有Player标签,放入数组
player_list = root.getElementsByTagName('Player')
for player in player_list:
# 遍历数组的同时,找到下面的Description标签,因为修改第一个,所以取第一个
description = player.getElementsByTagName("Description")[0]
if description.getAttribute("Name") == "HV":
# 如果Name为"HV",修改Speed的Value值,否则循环继续
speed = player.getElementsByTagName("Speed")[0]
speed.setAttribute('Value', h_speed)
导出文件
因为批量导出文件,所以可能需要输入的名字有所改变,最后会提到一些在写这个代码遇到的一些语句。
# 将生成 xml 保存,导入想要取得名字。
def save_xml(filename):
# file_xml_path为文件输出的目标文件夹路径
fileHandle = open(file_xml_path + filename, 'w')
dom.writexml(fileHandle, '', '', '', 'UTF-8')
导出文件时命名
分离文件扩展名
import os
print(os.path.splitext('HelloWorld.xml'))
运行结果:
('HelloWorld', '.xml')
把原文件名称扩展名清除:
os.path.splitext(all_file[i])[0]
整型转换十六进制
- 将19转换为十六进制
hex(19)
结果为0x13
- 去掉前面的0x
hex(19).replace('0x','')
- 保持数字为两位
hex(1).replace('0x','').zfill(2)
在左侧补0,保持数值不变
上一篇: transform属性怎么使用
下一篇: Java中关于程序性能优化的实例讲解