替换XML文件中的特定字符串

2024-09-28 19:29:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用变量的值替换文件中的特定字符串:

在我的文件中有以下两行:

<CtrlSum>10</CtrlSum>
<sum>45</sum>

我想搜索值“10”并将其替换为“45”

我试过这样的方法:

with open(path,'r+') as f:
    lst=f.readlines()
    for j in lst:
        if'sum' in j:
            Somme = j.split('>')[1].split('<')[0]
            print(Somme)

    for i in lst:
        if 'CtrlSum' in i:
            Ctrl = i.split('>')[1].split('<')[0]
    print (Ctrl)

    f.writelines(f.replace(Ctrl,Somme))

但我有一个错误:

f.writelines(f.replace(Ctrl,Somme)) AttributeError: '_io.TextIOWrapper' object has no attribute 'replace'

什么地方出了问题,我该如何解决


Tags: 文件方法字符串inforwritelinesifreplace
3条回答

replace()函数只能用于字符串。 你的f不是字符串,而是文件本身。您需要调用f.read()以获取作为字符串的文件内容,并在此基础上调用replace()

编辑:选中此链接,它说明了在文件上写入的不同方法:)

https://pythonexamples.org/python-replace-string-in-file/

您可以简单地执行以下操作:

import re

with open('a.txt','r') as f:
    text_value = f.read()

    sum_val = sum(map(int, re.findall(r'<sum>(\d+)</sum>', text_value)))

with open('a.txt','w') as f:
    f.write(re.sub(r'<CtrlSum>(.+)</CtrlSum>', f'<CtrlSum>{sum_val}</CtrlSum>', text_value))

不需要readlines()writelines()或任何循环。只需用.read()->;处理it->write()

使用XML解析

import xml.etree.ElementTree as ET

xml = '''<r><CtrlSum>10</CtrlSum>
<sum>45</sum></r>'''

root = ET.fromstring(xml)
root.find('.//CtrlSum').text = root.find('.//sum').text
ET.dump(root)

输出

<r>
   <CtrlSum>45</CtrlSum>
   <sum>45</sum>
</r>

相关问题 更多 >