python cdf阅读器工具包
cdflib的Python项目详细描述
<<<<<<<<<
CDFLIB
cdflib
是一个python模块,无需安装
cdf美国宇航局图书馆
python<3.5是必需的。 此模块仅使用numpy,没有复杂的前置请求。
安装
要安装,请打开终端/命令提示符,然后键入:
啊!有两种不同的CDF类:CDF读取器和CDF写入器。
目前,您不能同时读取和写入同一文件。 然而,未来的实现将统一这两个类。
CDF读卡器类
要开始访问cdf文件中的数据,请首先创建一个新的cdf类。 这可以通过以下命令完成 啊!
然后,可以对变量调用不同的函数。 例如:
啊!此命令将返回变量variable1
中从记录0到150的所有数据。
下面是您可以调用的8个不同函数的列表。
CDF信息()
返回显示基本cdf信息的字典。 此信息包括
cdf
cdf的名称版本
CDF的版本编码
CDF的结束性多数
行/列多数zvariables
zvariable数字及其对应名称的字典变量
可变量数字及其对应名称的字典属性
属性号及其相应名称和范围的字典校验和
校验和指示符numu rdim
维度数,仅适用于变量rdim size
尺寸,仅适用于变量压缩
CDF在文件级压缩leap second updated
上次更新的闰秒表(如果适用)
变量q(变量)
返回显示基本变量信息的字典。 此信息包括
变量
变量的名称num
变量号变量类型
变量类型:zvariable或rvariable数据类型
变量的CDF数据类型- ` num_elements']变量的元素数
num_dims
变量记录的维度尺寸
变量记录的形状稀疏性
变量的记录稀疏性最后记录
最大写入记录数(基于0)尺寸变化
尺寸变化记录差异
记录差异pad
如果设置了填充值压缩
gzip压缩级别,0到9。0如果未压缩- ` block_factor']压缩变量时的阻塞因子
ATTINQ(属性=无)
返回属性信息的python字典。 如果没有属性 提供所有属性的列表。
attget(属性=无,条目=无)
返回所提供的条目号处的属性值。一 可以使用变量名代替其对应的条目号。一 字典返回时带有以下定义的键
项目大小
每个输入值的字节数项目数
提取的值总数数据类型
CDF数据类型数据
检索的属性数据为标量值、numpy数组或字符串
varattsget(变量=无,展开=假)
获取所有变量属性。
与返回单个属性项值的attget不同,此函数返回dict()
中的所有变量属性项。
如果找不到条目,则返回none
。如果
不提供变量名,将打印变量列表。如果展开
以非false输入,然后还返回每个条目的数据类型
以列表形式显示为[条目,'cdf_xxxx']
。对于没有任何属性
输入时,它们也将返回无值。
globalattsget(expand=false)
获取所有全局属性。此函数返回所有全局
字典中的属性项(以"attribute"的形式:
{entry:value}对)。如果没有找到条目,则没有
返回。如果expand以非false输入,则每个条目的数据
类型也以列表形式返回为[entry,'cdf_xxxx']
。
对于没有任何条目的属性,它们也将返回无值。
varget()
varget(variable=None,[epoch=None],[[starttime=None,endtime=None]|[startrec=0,endrec=None]],[,expand=True])
返回变量数据。变量可以输入
一个名字或一个可变的数字。默认情况下,它返回一个numpy.ndarray
或者使用变量
数据及其规格。
如果expand=true
,则返回一个带有
以下是输出的定义键
记录
每个变量记录的维度号rec_shape
可变记录维度的形状记录数
记录总数返回的记录数
检索到的记录数数据类型
CDF数据类型数据
检索到的变量数据实数记录
列表中稀疏记录变量的实数记录编号
默认情况下,将返回完整的变量数据。只获得 记录变量的数据部分,时间或 可以指定记录(基于0)范围。'"纪元"可以用来 指定此变量所依赖的时间变量 搜索时间范围。对于符合ISTP的CDF,时间 变量将来自此变量的"depend_0"属性。 函数将自动搜索它,因此无需指定 "时代"。如果未指定开始时间或结束时间,则 特定历元数据类型的可能最小值或最大值为 假定的。如果未指定开始或结束记录,则 从0点开始或/和结束于最后一个写入的数据。
开始(和结束)时间应在列表中显示为:
- [年-月-日-时-分-秒]对于CDF纪元
- [年-月-日-时-分-秒-毫秒-微秒-微秒-微微秒]适用于CDF_epoch16
- [年-月-日-时-分-秒-毫秒-微秒-纳米秒]用于CDF_时间_TT2000
如果没有足够的时间分量,则只有最后一项可以具有子时间分量的浮动部分。
注意:cdf的cdf_epoch16数据类型为每个数据值使用2个8字节的双精度数。 在python中,每个值都以复数或 完成128。
epochrange
epochrange(epoch,[starttime=None,endtime=None])
获取历元范围。
返回记录号的list()
,表示从纪元数据开始的时间范围内相应的开始和结束记录。
如果在时间范围内没有写入或找到数据,则返回"无"。
getversion()
显示代码版本。
importcdflibswea_cdf_file=cdflib.CDF('/path/to/swea_file.cdf')swea_cdf_file.cdf_info()x=swea_cdf_file.varget('NameOfVariable')swea_cdf_file.close()
CDF编写器类
cdf(路径,cdf_spec=none,delete=false)
创建空的CDF文件。path是CDF的路径名(带有或
没有.cdf扩展名)。
cdf_spec
是
CDF文件,以字典的形式。字典里可以有
以下值:
多数
"row_major"或"column_major"或其对应值。默认为"Column\u Major"。编码
数据编码方案。请参阅有关有效值的cdf文档。可以是字符串或其数字对应值。默认为"主机"。校验和
是否在文件创建时设置数据验证。默认值为false。rdim_size
尺寸,仅适用于变量。压缩
是否在文件级别压缩CDF。值为0-9或真/假,默认值为0/假。
写入globalattrs(globalattrs)
写入全局属性。globalattrs是一本 全局属性名及其值对。值是 条目号和值对的字典。例如:
globalAttrs={}globalAttrs['Global1']={0:'Global Value 1'}globalAttrs['Global2']={0:'Global Value 2'}
对于非字符串值,请使用包含该值及其CDF数据类型的列表。 例如:
globalAttrs['Global3']={0:[12,'cdf_int4']}globalAttrs['Global4']={0:[12.34,'cdf_double']}
如果未提供数据类型,则相应的CDF数据类型为 假设:
globalAttrs['Global3']={0:12}as'cdf_int4'globalAttrs['Global4']={0:12.34}as'cdf_double'
cdf允许属性的非字符串数据有多个值:
pip install cdflib0
对于全局变量中的多个条目,它们应在 此表单:
pip install cdflib1
写入变量分配器(变量分配器)
写入变量的属性,前提是该变量已存在。 variableattrs是一个具有变量属性名和 它的入口值对。条目值也是 变量ID和值对。变量id可以是变量名或 文件中的ID号。如果变量 不存在。 例如:
pip install cdflib2
写入变量(变量规格,变量属性=无,变量数据=无)
写入变量以及变量属性和数据。 var_spec是包含 变量。用于创建变量的必需/可选键:
所需密钥:
变量
变量的名称数据类型
CDF数据类型num_elements
元素数。对于数字类型,始终为1。字符串类型的字符长度。rec_变化
尺寸大小,仅适用于变量。
对于z变量:
尺寸
仅适用于零变量的尺寸。使用[]表示0维。每个维度对于z变量都是不同的。
对于变量:
尺寸变化
仅适用于变量的尺寸变化。
可选键:
< UL>var_type
变量是zvariable还是rvariable。有效值:"zvariable"和"rvariable"。默认值为"zvariable"。sparse
变量是否有稀疏记录。有效值为"no_sparse"、"pad_sparse"和"prev_sparse"。默认值为"无稀疏"。压缩
设置gzip压缩级别(0到9),0表示不压缩。默认值是使用级别6压缩(仅当压缩数据小于未压缩数据时才执行此操作)。块因子
块因子,压缩变量时块中的记录数。pad
填充值(字节、numpy.ndarray或字符串)var廑u attrs是一个字典,具有{attribute:value}对。这个 属性是变量属性的名称。价值可以有它的 为数字数据指定的数据类型。如果不是,基于python的 类型,则假定相应的cdf类型:cdf_int4 for int, 浮点数为CDF_Double,复数数为CDF_Epoch16,整数为CDF_Int8 长。例如:
pip install cdflib3
变量数据是变量的数据。如果变量是正则的 没有稀疏记录的变量,它必须在 字节,或numpy.ndarray表示数值变量,或str或str列表表示 字符串变量。如果变量具有稀疏记录,则变量数据应为 以包含两个元素的列表/元组表示,第一个元素是 包含物理记录号的列表/元组,第二个是 字节、numpy.ndarray或字符串列表中的变量数据。 变量数据可以只有物理记录的数据(具有相同的 作为第一个元素的记录数)或具有来自两个物理元素的数据 记录和虚拟记录(包含填充数据)。Var_数据有 表格:
pip install cdflib4
请参阅示例了解其设置。
getversion()
显示代码版本和修改日期。
注:cdf epoch数据类型cdf_epoch的属性输入值, cdf_epoch16或cdf_time_tt2000可以用数字表示 窗体或编码字符串窗体。 对于数字,cdf_epoch数据是8字节浮点,cdf_epoch16字节复数,cdf_time_2000 8字节 长。epoch数据的默认编码字符串应该具有 表格:
pip install cdflib5
其中mon是3个字符的月份。
示例使用-
使用主cdf文件作为创建cdf的模板。两个全球 可变元数据来自主cdf。 每个变量的规范也从主cdf复制。 只需填写变量数据即可写入新的CDF文件:
pip install cdflib6
CDF时期
导入cdflib还导入cdfepoch模块,它处理 基于CDF的时代。以下函数可用于转换回 以不同的方式显示日期。你可以叫这些 功能如下:
pip install cdflib7
CDF中有三(3)种历元数据类型:CDF历元、CDF历元16 以及CDF时间TT2000。
- cdf_epoch是自0年以来的毫秒。
- cdf_epoch16是0年以来的皮秒。
- cdf_time_tt2000(简称tt2000)是j2000之后的纳秒 闰秒。
cdf_epoch是一个单双精度(如python中的float),cdf_epoch16是 2倍(在python中是复杂的),tt2000是8字节整数(作为int 在蟒蛇中)。在numpy中,它们是np.float64、np.complex128和np.int64, 分别是。所有这些纪元值都可以来自cdf.varget 功能。
提供五个主要功能
编码(epochs,iso_8601=false)
将历元编码为UTC字符串。
- cdf_epoch:输入应该是float或float列表(在numpy中,是 float64或float64的np.ndarray)每个历元都由 默认为ISO 8601表格:2004-05-13T15:08:11.022,或者,如果是ISO 8601 设置为false,2004年5月13日15:08:11.022
- cdf_epoch16:输入应该是复数或复数列表(在numpy中,是 NP.complex128或NP.ndarraynp.complex128)每个纪元 编码,默认为ISO 8601格式: 2004-05-13T15:08:11.022033044055或,如果ISO_设置为false, 2004年5月13日15:08:11.022.033.044.055
- TT2000:输入应该是一个int或一个int列表(在numpy中,一个 int64或np.int64的np.ndarray)每个历元都由 默认为ISO 8601表格:2008-02-02t06:08:10.10.012014016或 ISO_设置为false,2008年2月2日06:08:10.012.014.016
unixtime(epochs,to_np=false)
将历元编码为1970-01-01之后的秒数。 精度仅保持在最接近的微秒。
如果到np=true,则值将以numpy数组的形式返回。
分解(epochs,to_np=false)
将历元分解为UTC组件。
- cdf_epoch:它们是7个日期/时间组件:年、月、日、小时、分钟、秒和毫秒
- CDF庠EPoch16:它们是10个日期/时间组件:年、月、日、时、分、秒和毫秒、微秒、纳秒和皮秒。
- TT2000:它们是9个日期/时间组件:年、月、日、小时、分钟、秒、毫秒、微秒、纳秒。
如果结果应为numpy数组,则将指定为np=true
。
计算[_epoch/_epoch16/_tt200](datetimes,to_np=false)
将提供的日期/时间组件计算为CDF epoch值。
对于cdf_epoch:要计算成cdf_epoch值,每个日期/时间元素都应该 有七(7)个组件,如年、月、日、时, 分秒和毫秒,在一个列表中。例如:
pip install cdflib8
或者,调用函数 相反,直接计算年代,至少三(3)个第一(向上 七)组成部分。最后一个部分,如果不是第七个,可以是 可以有一小部分单位的浮子。
对于CDF-EPoch16:它们应该正好有十(10)个组件,如年、月、日, 小时、分钟、秒、毫秒、微秒、纳秒和 皮秒,在名单上。例如:
pip install cdflib9
或者,直接调用compute_epoch函数,至少 三(3)个第一(最多十)组件。最后一个组件,如果不是 第10个,可以是一个浮点数,可以有一小部分单位。
对于TT2000:每个TT2000类型的日期/时间应该正好有九(9)个组件, 年、月、日、时、分、秒、毫秒、微秒, 纳秒,在一个列表中。例如:
importcdflibcdf_file=cdflib.CDF('/path/to/cdf_file.cdf')0
或者,直接调用compute_TT2000函数,至少 三(3)个第一(最多九)组件。最后一个组件,如果不是 第九个,可以是一个浮点数,可以有一小部分单位。
如果结果应为numpy类,则将指定为np=true
。
解析(datetimes,to_np=false)
将提供的日期/时间字符串解析为CDF epoch值。
- cdf_epoch:字符串的格式必须为"dd mmm yyyy hh:mm:ss.xxx"或"yyyy mm ddthh:mm:ss.xxx"(在ISO_中)。字符串是encode函数的输出。
- CDF_epoch16:字符串的格式必须为"dd mmm yyyy hh:mm:ss.mmm.uuu.nnn.ppp"或"yyyy mm ddthh:mm:ss.mmmuuunnppp"(在ISO_8601中)。字符串是encode函数的输出。
- TT2000:字符串的格式必须为"dd mmm yyyy hh:mm:ss.mmm.uuu.nnn"或"yyyy mm ddthh:mm:ss.mmmuuunnnn"(在ISO_中)。字符串是encode函数的输出。
如果结果应为numpy类,则将指定为np=true
。
findepochrange(epochs,starttime=none,endtime=none)
从 CDF纪元数据类型。它返回一个记录号列表。如果开始 不提供时间,则假定时间是可能的最小值 价值。如果未提供结束时间,则最大可能值 假设。这个时代被认为是按时间顺序排列的。这个 开始和结束时间应具有正确的日期/时间编号 组件,对应于纪元的daTA型:
开始/结束时间应以epoch单位表示,或以 "计算纪元/epoch16/tt2000"部分描述的列表格式。
getversion()
显示代码版本。
getLeapSecondLastUpdated()
显示闰秒添加到闰秒表中的最新日期。
CDF天文时代
如果用户安装了astropy,导入cdflib也会导入模块 cdflib.cdfastropy,它包含了上述模块的所有功能, 但是使用astropy时间类进行所有转换。它也可以用在 如上述模块所示:
importcdflibcdf_file=cdflib.CDF('/path/to/cdf_file.cdf')1
另外,也许最重要的是,还有一个additional函数可以转换 cdf_epoch/epoch16/tt2000次到astropy时间类:
将"u"转换为"astropy(epochs,format=none)
将历元转换为天体时间。
- cdf_epoch:输入应该是float或float列表(在numpy中,是 np.float64或np.float64的np.ndarray)。如果要忽略输入类型并转换 要直接使用cdf_epoch,请在调用函数时指定format='cdf_epoch'。
- cdf_epoch16:输入应该是复数或复数列表(在numpy中,是 np.complex128或np.complex128的np.ndarray)。如果要忽略输入类型并转换 要直接使用cdf_epoch,请在调用函数时指定format='cdf_epoch16'。
- TT2000:输入应该是一个int或一个int列表(在numpy中,一个 或np.int64的np.ndarray)。如果要忽略输入类型并转换 要直接使用cdf_epoch,请在调用函数时指定format='cdf_tt2000'。
有关astropy时间及其包含的所有功能的详细信息,请查看astropy文档
https://docs.astropy.org/en/stable/time/