批量查找修改xml文件内容并更改名称

最近处理一些数据量小的内容,太喜欢用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]

整型转换十六进制

  1. 将19转换为十六进制
hex(19)
结果为0x13
  1. 去掉前面的0x
hex(19).replace('0x','')
  1. 保持数字为两位
hex(1).replace('0x','').zfill(2)
不满两位在左侧补0
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页