【问题标题】:Open and parse multiple XML files from a folder打开并解析文件夹中的多个 XML 文件
【发布时间】:2018-01-30 23:40:24
【问题描述】:

下面的 Python 代码适用于一个 XML。当我尝试打开和解析多个 XML 文件时出现问题,这些文件具有相似的结构并保存在文件夹中(第 4 行 -> data = open('[0-9].xml',"rb")。我正在尝试正则表达式,但我不确定这是否也适用于命名文档。

所有文档的名称是“11111.xml, 22222.xml, 33333.xml ...”等等。

import xml.etree.ElementTree as ET
import re

data = open ('[0-9].xml',"rb")
tree = ET.parse (data)
lst_jugador = tree.findall('data_panel/players/player')
for jugador in lst_jugador:
    print (jugador.find('name').text, jugador.get("id"))

【问题讨论】:

    标签: python glob


    【解决方案1】:

    如果您需要解析目录中的所有文件,您可以使用os.listdir()

    from os import listdir
    for file in listdir(<your directory>):
      #if you have to be more selective inside your directory
      #just add a conditional to skip here
      with open(file, "rb"):
        tree = ET.parse(data)
        lst_jugador = tree.findall('data_panel/players/player')
        for jugador in lst_jugador:
            print (jugador.find('name').text, jugador.get("id"))
    

    【讨论】:

    • 非常感谢!但是,它给了我'NameError:名称'os'未定义'。有什么建议吗?谢谢!
    • 哎呀,只需从 os.listdir 中删除 os
    【解决方案2】:

    您可以使用glob 模块。

    import glob
    import xml.etree.ElementTree as ET
    
    filenames = glob.glob("[0-9].xml")  # change the pattern to match your case
    
    for filename in filenames:
    
        with open(filename, 'r', encoding="utf-8") as content:
    
            tree = ET.parse(content)
    
            lst_jugador = tree.findall('data_panel/players/player')
    
            for jugador in lst_jugador:
    
                print (jugador.find('name').text, jugador.get("id"))
    

    【讨论】:

    • 太好了,非常感谢!有效。我还必须在 [0-9] 之后添加 (*)
    猜你喜欢
    • 2020-04-26
    • 2019-02-17
    • 2019-01-19
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多