gpt4 book ai didi

python-3.x - 如何使用 python 查找和更新 XML 文件内容

转载 作者:行者123 更新时间:2023-12-04 15:20:42 27 4
gpt4 key购买 nike

例如

 <managedObject class="New" distName="MB-85404/TB-85404/ST-4/a" version="xL20A_1911_002" operation="open">
<p name="a">320ms</p>
<p name="b">enabled</p>
<p name="c">640ms</p>
<p name="d">320ms</p>
<p name="e">640ms</p>
<p name="f">1280ms</p>
<p name="g">6</p>
</managedObject>
<managedObject class="new" distName="AL-76867/MB-85404/TB-85404/ST-4/b" version="xL20A_1911_002" operation="open">
<p name="h">320ms</p>
<p name="i">enabled</p>
<p name="j">640ms</p>
<p name="k">320ms</p>
<p name="l">640ms</p>
<p name="a">1280ms</p>
<p name="l">6</p>
</managedObject>
<managedObject class="New" distName="MB-85404/TB-85404/ST-4/c" version="xL20A_1911_002" operation="open">
<p name="a">320ms</p>
<p name="p">enabled</p>
<p name="q">640ms</p>
<p name="r">320ms</p>
<p name="s">640ms</p>
<p name="t">1280ms</p>
<p name="u">6</p>
</managedObject>

在此示例中,我首先要更新 (distName="MB-85404/TB-85404/ST-4/[a or b or c]")(distName="MB-85409/TB-85409/ST-4/[a or b or c]")

在对整个 XML 文件执行此操作之后。

完成此操作后,我想更新标签 name="a" 的值为此 <managedObject class="New" distName="MB-85409/TB-85409/ST-4/[a or b or c] >

我该怎么做,我有一个 40000 多行的 XML 文件。

编辑1

with open("C:/files/abcd.xml", "w+") as file:
xml_data = file.read()
xml_data.replace("85409","85904")
file.write("outPuta.xml")

编辑2

soup = bs(content,"xml")
loc = re.compile(r'[A-Z]+-+[0-9]+/+SMOD+-+[1-9]')
for i in soup.find_all('managedObject', distName=loc):
locat=i.find('p',{'name':'moduleLocation'})
locat.string="3444 South texas"

通过这段代码,我试图找到 distnameregex loc 匹配, 和里面 managedObject ,我试图找到标签 <p name="moduleLocation" 4444 New York>我想更新 "4444 New York""3444 South texas"这给了我下面提到的错误

locat.string="3444 South texas"
AttributeError: 'NoneType' object has no attribute 'string'

最佳答案

我希望我理解你的问题,这会找到所有 distName="MB-85404/TB-85404/ST-4/[a or b or c]"标记并替换 85404对于 85409并更新 <p name="a">标签:

import re
from bs4 import BeautifulSoup


xml_data = ''' <managedObject class="New" distName="MB-85404/TB-85404/ST-4/a" version="xL20A_1911_002" operation="open">
<p name="a">320ms</p>
<p name="b">enabled</p>
<p name="c">640ms</p>
<p name="d">320ms</p>
<p name="e">640ms</p>
<p name="f">1280ms</p>
<p name="g">6</p>
</managedObject>
<managedObject class="new" distName="AL-76867/MB-85404/TB-85404/ST-4/b" version="xL20A_1911_002" operation="open">
<p name="h">320ms</p>
<p name="i">enabled</p>
<p name="j">640ms</p>
<p name="k">320ms</p>
<p name="l">640ms</p>
<p name="a">1280ms</p>
<p name="l">6</p>
</managedObject>
<managedObject class="New" distName="MB-85404/TB-85404/ST-4/c" version="xL20A_1911_002" operation="open">
<p name="a">320ms</p>
<p name="p">enabled</p>
<p name="q">640ms</p>
<p name="r">320ms</p>
<p name="s">640ms</p>
<p name="t">1280ms</p>
<p name="u">6</p>
</managedObject>'''

soup = BeautifulSoup('<data>' + xml_data + '</data>', 'xml')

r = re.compile(r'^MB-85404/TB-85404/ST-4/(?:a|b|c)')

for o in soup.find_all('managedObject', distName=r):
o['distName'] = o['distName'].replace('85404', '85409')
p = o.find('p', {'name':'a'})
p.string = 'UPDATED ' + p.string

soup.data.unwrap()
print(soup)

打印:

<?xml version="1.0" encoding="utf-8"?>
<managedObject class="New" distName="MB-85409/TB-85409/ST-4/a" operation="open" version="xL20A_1911_002">
<p name="a">UPDATED 320ms</p>
<p name="b">enabled</p>
<p name="c">640ms</p>
<p name="d">320ms</p>
<p name="e">640ms</p>
<p name="f">1280ms</p>
<p name="g">6</p>
</managedObject>
<managedObject class="new" distName="AL-76867/MB-85404/TB-85404/ST-4/b" operation="open" version="xL20A_1911_002">
<p name="h">320ms</p>
<p name="i">enabled</p>
<p name="j">640ms</p>
<p name="k">320ms</p>
<p name="l">640ms</p>
<p name="a">1280ms</p>
<p name="l">6</p>
</managedObject>
<managedObject class="New" distName="MB-85409/TB-85409/ST-4/c" operation="open" version="xL20A_1911_002">
<p name="a">UPDATED 320ms</p>
<p name="p">enabled</p>
<p name="q">640ms</p>
<p name="r">320ms</p>
<p name="s">640ms</p>
<p name="t">1280ms</p>
<p name="u">6</p>
</managedObject>

编辑:更改8540485409在每个distName= ,你可以这样做:

for o in soup.find_all('managedObject', {'distName': True}):
o['distName'] = o['distName'].replace('85404', '85409')

EDIT2:替换整个文件:

with open("C:/files/abcd.xml", "r") as f_in:
xml_data = f_in.read()

with open("C:/files/output.xml", "w") as f_out:
f_out.write(xml_data.replace("85409","85904"))

关于python-3.x - 如何使用 python 查找和更新 XML 文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63380448/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com