问题场景:需要从网上获取一个以 GZip 格式压缩的 xml 文件,并使用 Python3 解析。
前提需求:希望直接解析 raw 数据而不是先保存为文件。
一般处理方法:先保存为文件,再通过 Python3 的 gzip 库 打开文件解析。
参考资料:Parsing a xml.gz file in python、tmpfile and gzip combination problem
代码实现(以 Xposed 模块官方仓库为例)
import gzip
import requests
import tempfile
from xml.etree import ElementTree
raw = requests.get("https://dl-xda.xposed.info/repo/full.xml.gz",
stream=True).raw.data
# 获取原始数据(bytes)
with tempfile.TemporaryFile(mode='w+b') as f:
# 创建虚拟文件(生成在内存中,关闭即清除)
f.write(raw)
f.flush()
f.seek(0)
# 写入数据
with gzip.GzipFile(mode='r', fileobj=f) as gzip_file:
# 解析虚拟文件
tree = ElementTree.parse(gzip_file)
print(tree.getroot())