用python解析xml.gz文件
我在本地机器上有一个tar.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,它有两个选项
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,它有两个选项:
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(内容)对我来说很有用