我的本地计算机上有一个名为abc.aXML.gz
的tar.gz文件,其中包含许多XML文件。我想从这些文件中找到一些数据,但不知道如何使用Elementtree
和gzip
解析这些文件。
import xml.etree.ElementTree as ET
import gzip
document = ET.parse(gzip("abc.aXML.gz"))
root = document.getroot()
答案 0 :(得分:0)
<强>已更新强>
要解析 gzip xml文件,使用 minidom解析器,有两个选项:
[第二个就效率而言是更强大的变体。]
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