使用python从xml文件中删除两个字符串之间的所有行

2024-06-01 05:40:02 发布

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

我正在编写一个脚本,用以下数据检查一个简短的xml文件:

示例:

<manager>
    <name="adi" lastName="kant">
        <info ip="10.12.180.107" platform="linux" user="root" password="dangerous"/>
    </name>
    <name="dino" lastName="kant">
        <info ip="10.12.180.108" platform="linux" user="root" password="dangerous"/>
    </name>
</manager>

我正在尝试创建一个python脚本,它将查看这个xml文件并删除所选的名称信息。在

示例:

^{pr2}$

我能想到的唯一解决方案是将文件读到我想删除的名称,然后将其添加到一个列表中,然后从要删除的名称后面的名称读取该文件并将其附加到另一个列表中,将这两个列表合并并打印到我的文件中。在

示例:

h = open("/home/service/chimera/array_cert/test.txt", "r")
output = []
lines = h.readlines()
for line in lines:
    if '<name="adi"' in line: 
        break
    output.append(line)
i = 0
for line in lines:
    i+=1
    if '<name="dino"' in line:
        break
for line in lines[i:]:
    output.append(line)
h.close()
h = open("/home/service/chimera/array_cert/test.txt", "w")
h.truncate()
for line in output:
    h.write(line)

但这似乎是不必要的复杂。有更简单的方法吗?在

我还在Linux系统上使用python2.6。在


Tags: 文件namein脚本名称示例列表for
2条回答

使用SAX解析器,如xml.sax。当它扫描XML文件中的每一个XML标记或“事件”(即打开标记、关闭标记、查看属性、查看一些数据等)时,可以进行回调。在收到这些回调时,请跟踪您是否在XML文件的一部分中,您是否希望保留(或删除)。如果您处于“保持”模式,则将数据流式传输到新文件中,否则就不会。在

在处理XML时,总是使用某种适当的解析器。尝试使用regex或尝试自己使用regex的危险是well documented。在

是否需要保留与源文件中相同的格式?如果没有,您可能只需要解析XML并输出一个新的XML文件。在

如果您可以信任源代码中的XML在不同的行上有<name...>和{},那么您可以稍微修改一下代码:

h = open("test1.txt", "r")
output = []
lines = h.readlines()
foroutput = 1
for line in lines:
    if '<name="adi"' in line:
        foroutput = 0
    if foroutput==1:
        output.append(line)
    elif '</name>' in line:
        foroutput = 1
h.close()
h = open("test2.txt", "w")
h.truncate()
for line in output:
    h.write(line)
h.close()

相关问题 更多 >