简体   繁体   English

从文件夹中打开并解析多个XML文件

[英]Open and parse multiple XML files from a folder

The Python code below works for one XML. 以下Python代码适用于一种XML。 The problem comes when I try to open and parse multiple XML files, which have a similar structure and are saved in the folder (line 4 -> data = open('[0-9].xml',"rb"). I am trying regular expressions, but I am not sure if that works for naming documents too. 当我尝试打开并解析多个具有相似结构并保存在文件夹中的XML文件时,就会出现问题(第4行-> data = open('[0-9] .xml',“ rb”)。我正在尝试使用正则表达式,但是我不确定这是否也适用于命名文档。

The name of all document is "11111.xml, 22222.xml, 33333.xml ..." and so on. 所有文档的名称为“ 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"))

You can use glob module. 您可以使用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"))

If all your the files in a directory need parsed, you could just use os.listdir() 如果您需要解析目录中的所有文件,则可以使用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"))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM