读取SDMX XML文件

sdmx的Python项目详细描述


读取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。仅当数据消息不包含 相关的DSD。
  • lazy:设置为True以懒洋洋地读取观察结果以允许 在不将整个数据集加载到内存中的情况下读取的数据集。 谨慎使用:懒散阅读会对 XML的结构(例如,序列键总是出现 在这个系列的任何观察之前)。这些假设似乎是 在我测试过的文件上是安全的,但这并不意味着它们 普遍正确。

数据消息阅读器

每个数据消息读取器都具有以下属性:

  • datasets():返回一个DatasetReader实例的iterable。 每个实例对应一个<DataSet>元素。

DatasetReader

DatasetReader具有以下属性:

  • key_family():返回数据集的KeyFamily。这个 对应于<KeyFamilyRef>元素。
  • series():返回一个Series实例的iterable。每个 实例对应于<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,它具有父值World, 返回值为 {"Country": ["World", "Europe", "United Kingdom"]}
  • observations():返回一个Observation实例的iterable。 每个实例对应一个<Obs>元素。

Observation

Observation具有以下属性:

  • time
  • value

示例

下面的脚本可用于打印 通用数据消息。(如果有压缩数据消息,则使用 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
importsysimportsdmxdefmain():dataset_path=sys.argv[1]dsd_path=sys.argv[2]withopen(dataset_path)asdataset_fileobj:withopen(dsd_path)asdsd_fileobj:dataset_reader=sdmx.generic_data_message_reader(fileobj=dataset_fileobj,dsd_fileobj=dsd_fileobj,)_print_values(dataset_reader)def_print_values(dataset_reader):fordatasetindataset_reader.datasets():key_family=dataset.key_family()name=key_family.name(lang="en")printnamedimension_names=key_family.describe_dimensions(lang="en")+["Time","Value"]forseriesindataset.series():row_template=[]key=series.describe_key(lang="en")forkey_name,key_valueinkey.iteritems():row_template.append(key_value)forobservationinseries.observations(lang="en"):row=row_template[:]row.append(observation.time)row.append(observation.value)printzip(dimension_names,row)main()

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
swing Java按钮/网格布局   java列出Google日历中的所有事件   java无效:单击API publisher test按钮后连接到后端时出错   带有内部赋值的java While循环导致checkstyle错误   java为什么trimToSize/ensureCapacity方法提供“公共”级访问?   文件输出流的java问题   ListIterator和并发修改异常的java问题   java如何使用两个URL映射   无法识别使用“./../”构造的字符串java相对路径,为什么?   首次写入remotelyclosedsocket不会触发异常,对吗?JAVA   java OneDrive REST API为文件上载提供了400个无效谓词   Java泛型、集合接口和对象类的问题   OpenSSL Java安全提供程序   jmeter java运行jmx禁用操作