pandas 如何在python中通过解析找到的行之后获取特定行

f1tvaqid  于 2022-11-05  发布在  Python
关注(0)|答案(1)|浏览(149)

我目前正在解析一个xml文件,以找到一个模式,并从其中提取我需要的东西。
有没有一种方法,当我找到我正在寻找的行,数两行下来,并抓住这一行。

with open(filepath) as f:
    for line in f:
        if pattern.search(line):
            #parse each line returned and return only the host names
            result = re.findall('"([^"]*)"',line )
            print(result)

示例性XML

<Computer3Properties name="UH25">
        <Description property="Description">
          <DescriptionValue value="lab" type="VTR" />

输出功率

UH25

所需输出

UH25
lab

现在我不能重新分析文件并查找模式,因为有许多

<DescriptionValue value=

因此,一旦找到主机名,我就必须获取它,然后逐行搜索值中的数据

n3h0vuf2

n3h0vuf21#

我创建了一个example.xml文件,其中包含您指定的确切示例内容:

<Computer3Properties name="UH25">
        <Description property="Description">
          <DescriptionValue value="lab" type="VTR" />

此代码:

import re

pattern = "UH25"

with open("path","r") as file:
    for line in file:
        if re.search(pattern,line):
            file.readline()
            print(file.readline())

将打印在找到模式匹配的行的两行之后的任何一行。使用示例文件,你会得到“”。之所以要打印两行,是因为readline()方法将获取 next 行的内容。(正如我所做的)将打印从匹配行开始的第二行。您说您希望的输出是从此行开始专门打印“lab”。如果是这样的话,只需要稍微修改print()行:

import re

pattern = "UH25"

with open("path","r") as file:
    for line in file:
        if re.search(pattern,line):
            file.readline()
            print(pattern,file.readline().split('"')[1],sep="\n")

现在,您的输出为:

UH25
lab

相关问题