跳转到主要内容

读取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 (10.1 kB 查看哈希)

上传时间

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面