用python解析xml.gz文件

用python解析xml.gz文件,python,xml,gzip,tar,Python,Xml,Gzip,Tar,我在本地机器上有一个tar.gz文件,名为abc.aXML.gz,其中包含许多XML文件。我想从这些文件中找到一些数据,但不知道如何使用Elementtree和gzip解析这些文件 import xml.etree.ElementTree as ET import gzip document = ET.parse(gzip("abc.aXML.gz")) root = document.getroot() 已更新 要解析gzip压缩的xml文件,请使用minidom parser,它有两个选项

我在本地机器上有一个tar.gz文件,名为
abc.aXML.gz
,其中包含许多XML文件。我想从这些文件中找到一些数据,但不知道如何使用
Elementtree
gzip
解析这些文件

import xml.etree.ElementTree as ET
import gzip
document = ET.parse(gzip("abc.aXML.gz"))
root = document.getroot()

已更新

要解析gzip压缩的xml文件,请使用minidom parser,它有两个选项:

  • 移交指向xml文件的文件对象
  • 将全部内容作为字符串移交
  • [就效率而言,第二个是更强大的变体。]

    import gzip
    from xml.dom.minidom import parse, parseString
    
    # open and read gzipped xml file
    infile = gzip.open( abc.aXML.gz )
    content = infile.read()
    
    # parse xml file content
     dom = minidom.parseString(content)
    

    要从tar存档中读取xml文件,请执行以下操作:

    #!/usr/bin/env python
    import tarfile
    from contextlib import closing
    from xml.etree import ElementTree as etree
    
    with tarfile.open('xmls.tar.gz') as archive:
        for member in archive:
            if member.isreg() and member.name.endswith('.xml'): # regular xml file
                with closing(archive.extractfile(member)) as xmlfile:
                    root = etree.parse(xmlfile).getroot()
                    print(root)
                    # use root here..
    

    对我来说,以下代码有效:

    import gzip
    import cStringIO
    from lxml import etree
    from xml.dom import minidom
    
    path                = 'Some path ending in .xml.gz'
    a_tag_of_an_element = 'document'
    fakefile            = cStringIO.StringIO(gzip.open(path, 'rb').read())
    root                = etree.iterparse(fakefile, tag=a_tag_of_an_element)
    
    metr = 0
    for _, ch_tree in root:
        metr += 1
        the_tag = ch_tree.tag
        rough_string    =  etree.tostring(ch_tree, encoding='utf-8')
        reparsed        = minidom.parseString(rough_string)
        print(reparsed.toprettyxml(indent="\t"))
    
    print(metr)
    

    它迭代地解析xml文件,而不从gz格式提取它。

    下面的代码对我来说很有用,可以读取和处理压缩的xml文件。
    我首先使用gzip解压文件,然后使用ElementTree

    import gzip
    import xml.etree.ElementTree as ET
    
    input = gzip.open('input-xml.gz', 'r')
    tree = ET.parse(input)
    root = tree.getroot()
    
    print root.tag
    print root.attrib
    

    可能重复的不是.gz文件这里有一个。你是说你有一个包含多个文件的tar.gz(注意:
    tar
    )存档吗?gzip存档文件只能包含一个文件。是的..我的文件是tar.gzip将最后一行更改为dom=minidom.parseString(内容)对我来说很有用