欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

批量查找修改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]

整型转换十六进制

  1. 将19转换为十六进制
hex(19)
结果为0x13
  1. 去掉前面的0x
hex(19).replace('0x','')
  1. 保持数字为两位
hex(1).replace('0x','').zfill(2)
在左侧补0,保持数值不变
相关标签: xml python xml