在python中解析xml.gz文件

时间:2015-10-26 13:15:47

标签: python xml gzip tar

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

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

4 个答案:

答案 0 :(得分:0)

<强>已更新

要解析 gzip xml文件,使用 minidom解析器,有两个选项:

  1. 移交指向xml文件的文件对象
  2. 将完整内容移交为字符串
  3. [第二个就效率而言是更强大的变体。]

    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)
    

答案 1 :(得分:0)

从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..

答案 2 :(得分:0)

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

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格式中提取它。

答案 3 :(得分:0)

以下代码为我工作,可以读取和处理压缩的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