Python 3.x 如何用python从xml文件中提取信息

Python 3.x 如何用python从xml文件中提取信息,python-3.x,xml,web-scraping,Python 3.x,Xml,Web Scraping,我有一个xml文件,需要从中提取一些信息。我需要的信息在标记tckrsymb中,它是股票id,其他信息在标记ntlfinvol、frstpric、MaxPric、MinPric中,它们是值 我的问题: 1-A必须将标签tckrsymb中的股票id信息与其他标签中的其他信息结合起来,如果可能的话,用“|”分隔一行,如下面的示例所示 示例:NEOE3F | 130667.98 | 25.79 | 25.95 | 25.52 2-某些标签没有ntlfinvol、frstpric、MaxPric、Min

我有一个xml文件,需要从中提取一些信息。我需要的信息在标记tckrsymb中,它是股票id,其他信息在标记ntlfinvol、frstpric、MaxPric、MinPric中,它们是值

我的问题:

1-A必须将标签tckrsymb中的股票id信息与其他标签中的其他信息结合起来,如果可能的话,用“|”分隔一行,如下面的示例所示

示例:NEOE3F | 130667.98 | 25.79 | 25.95 | 25.52

2-某些标签没有ntlfinvol、frstpric、MaxPric、MinPric标签上的信息。在这种情况下,我必须像下面的例子一样输入0

示例:IDIJ20P282800 | 0 | 0 | 0 | 0

我以前做的代码。在该代码中,我可以提取Id stock信息并将其作为一个键放入dictionary中,但是其他值信息总是相同的,因为我使用的是bs4库的find方法,本例只返回第一次出现的值。我需要提取股票id和每个股票id的所有值信息(如果存在)

from bs4 import BeautifulSoup as bs
import lxml

# Read the XML file
with open('BVBG.086.01_BV000328202001200328000001926374007.xml',"r") as file:
    bs_content = bs(file, "lxml")

    paper = {}

    for t in bs_content.find_all("tckrsymb"):
        valor = []

        volume_financeiro = float(bs_content.find('ntlfinvol').get_text())
        valor.append(volume_financeiro)

        preco_abertura = float(bs_content.find("frstpric").get_text())
        valor.append(preco_abertura)

        paper[t.get_text()] = valor

    print(paper)

我的程序的结果是:{'IDIJ20P282800':[130667.98,25.79],'NEOE3F':[130667.98,25.79],'DIRR157':[130667.98,25.79],'IDIJ20P282900':[130667.98,25.79],'BRFSA4':[130667.98,25.79],'BRFSC4':[130667.98,25.79]}


我还有一个软件,可以从B3(BVBG.017.02,BVBG.013.02…)读取这些文件和其他文件,但是我的语言程序是Kotlin,所以我不知道它是否有帮助。
在Kotlin中,如果我将标记配置为可选的,那么在对象中,如果它在文档中不存在,Kotlin将返回null。如果为空,我将该值设置为零。很可能python也有类似的功能。

您的文档是XML,因此如果您感兴趣,使用lxml和xpath可能更容易。