读取SDMX XML文件
项目描述
读取SDMX XML文件。我只添加了我需要的功能,因此这远远不是详尽实现。欢迎贡献。
安装
pip install sdmx
用法
sdmx.generic_data_message_reader(fileobj, dsd_fileobj=None, lazy=None)
给定一个表示通用数据消息XML的文件对象,返回一个数据消息读取器。
sdmx.compact_data_message_reader(fileobj, dsd_fileobj=None, lazy=None)
给定一个表示紧凑数据消息XML的文件对象,返回一个数据消息读取器。
数据消息读取器的可选参数
dsd_fileobj:表示相关DSD的XML的文件对象。只有当数据消息不包含相关DSD的URL时才使用。
lazy:设置为True以懒加载观察结果,允许在不将整个数据集加载到内存的情况下读取数据集。请谨慎使用:懒加载对XML的结构做出了某些假设(例如,系列键总是出现在该系列的任何观察结果之前)。这些假设似乎在我测试的文件上是安全的,但这并不意味着它们普遍有效。
数据消息读取器
每个数据消息读取器都具有以下属性
datasets():返回一个DatasetReader实例的可迭代对象。每个实例对应于一个<DataSet>元素。
DatasetReader
DatasetReader具有以下属性
key_family():返回数据集的KeyFamily。这对应于<KeyFamilyRef>元素。
series():返回一个Series实例的可迭代对象。每个实例对应一个<Series>元素。
KeyFamily
KeyFamily具有以下属性
name(lang):在语言lang中键族的名称。
describe_dimensions(lang):对于键族的每个维度,找到引用的概念并使用语言lang中的其名称。返回与源文件中相同的顺序的字符串列表。
Series
Series具有以下属性
describe_key(lang):系列的键是数据集每个维度到值的映射。例如,如果数据集有一个名为Country的维度,系列的值可能是United Kingdom。返回一个映射字符串到字符串列表的有序字典。字典中的项与describe_dimensions()返回的维度的顺序相同。例如,如果数据集只有一个名为Country的维度,返回的值将是{"Country": ["United Kingdom"]}。所有值的所有祖先也会被描述,祖先出现在后代之前。例如,如果值United Kingdom有父值Europe,而Europe有父值World,返回的值将是{"Country": ["World", "Europe", "United Kingdom"]}。
observations():返回一个Observation实例的可迭代对象。每个实例对应一个<Obs>元素。
Observation
Observation具有以下属性
时间
值
示例
以下脚本可以用于打印出通用数据消息中包含的值。(如果您有一个紧凑型数据消息,则使用compact_data_message_reader代替generic_data_message_reader也应有效。)假设脚本保存为read-sdmx-values.py,可以像这样使用
python read-sdmx-values.py path/to/generic-data-message.xml path/to/dsd.xml
import sys
import sdmx
def main():
dataset_path = sys.argv[1]
dsd_path = sys.argv[2]
with open(dataset_path) as dataset_fileobj:
with open(dsd_path) as dsd_fileobj:
dataset_reader = sdmx.generic_data_message_reader(
fileobj=dataset_fileobj,
dsd_fileobj=dsd_fileobj,
)
_print_values(dataset_reader)
def _print_values(dataset_reader):
for dataset in dataset_reader.datasets():
key_family = dataset.key_family()
name = key_family.name(lang="en")
print name
dimension_names = key_family.describe_dimensions(lang="en") + ["Time", "Value"]
for series in dataset.series():
row_template = []
key = series.describe_key(lang="en")
for key_name, key_value in key.iteritems():
row_template.append(key_value)
for observation in series.observations(lang="en"):
row = row_template[:]
row.append(observation.time)
row.append(observation.value)
print zip(dimension_names, row)
main()
项目详情
sdmx-0.2.10.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 96e4d0120d93c029fa1b54ead19c2c0c3883bc68d56b33da45c1f1fb6f1eda8e |
|
MD5 | c8ae888a707140b69d7bfe2394941417 |
|
BLAKE2b-256 | 8881dd6f588555f0f690e906badb301ba4525fd81bc3f74f53dc87faec751983 |