scipy.io.

netcdf_file#

scipy.io.netcdf_file(filename, mode='r', mmap=None, version=1, maskandscale=False)[源代码]#

用于 NetCDF 数据的文件对象。

netcdf_file 对象有两个标准属性:dimensionsvariables。两者的值均为字典,分别将维度名称映射到其关联的长度以及变量名称映射到变量。应用程序绝不应修改这些字典。

所有其他属性均对应于 NetCDF 文件中定义的全局属性。通过分配给 netcdf_file 对象的属性,创建全局文件属性。

参数:
filename字符串或类文件

字符串 -> 文件名

mode{‘r’, ‘w’, ‘a’},可选

读-写-追加模式,默认为 ‘r’

mmapNone 或布尔值,可选

读取时是否对 filename 执行 mmap。当 filename 为文件名时,默认值为 True;当 filename 为类文件对象时,默认值为 False。请注意,当使用 mmap 时,返回的数据数组直接引用磁盘上的映射数据,并且在存在引用时不能关闭该文件。

version{1, 2}, 必选

要读/写的 netcdf 版本,其中 1 表示经典格式,2 表示64 位偏移格式。默认值为 1。请参阅此处了解详细信息 此处

maskandscalebool,必选

根据属性自动调整和/或屏蔽数据。默认值为 False。

备注

该模块比其他模块的主要优势是不必将代码链接到 NetCDF 库。该模块源自 pupynere

NetCDF 文件是一种自描述二进制数据格式。此文件包含描述了文件中的维度和变量的元数据。可以在 此处 找到有关 NetCDF 文件的更多详细信息。NetCDF 数据结构主要包含三个部分

  1. 维度

  2. 变量

  3. 属性

维度部分记录变量使用的每个维度的名称和长度。然后,变量将指示其使用的维度和任何属性,例如数据单位,以及包含变量的数据值。良好的做法是包括一个与维度同名的变量,以提供该轴的值。最后,属性部分将包含其他信息,例如文件创建者的姓名或用于收集数据的仪器。

在向 NetCDF 文件写入数据时,通常需要指示“记录维度”。记录维度是变量的无界维度。例如,一个温度变量可能具有维度:纬度、经度和时间。如果某人想要在时间推移的过程中向 NetCDF 文件添加更多温度数据,则应将温度变量的时间维度标记为记录维度。

此外,NetCDF 文件头包含数据在文件中的位置,以便能够以有效的方式进行访问,而无需将不必要的数据加载到内存中。它使用 mmap 模块创建映射到磁盘数据上的 Numpy 数组,目的是相同的。

请注意,当使用 netcdf_file 打开带有 mmap=True(默认情况下为只读)的文件时,它返回的数组直接引用磁盘上的数据。如果此类数组未关闭,就无法按要求执行干净的关闭。如果您希望在关闭文件后处理从 mmap 中获取的数据数组,则可以复制这些数据数组,请参阅以下示例。

示例

创建一个 NetCDF 文件

>>> from scipy.io import netcdf_file
>>> import numpy as np
>>> f = netcdf_file('simple.nc', 'w')
>>> f.history = 'Created for a test'
>>> f.createDimension('time', 10)
>>> time = f.createVariable('time', 'i', ('time',))
>>> time[:] = np.arange(10)
>>> time.units = 'days since 2008-01-01'
>>> f.close()

请注意,将 arange(10) 分配给 time[:]。公开时间变量的分片允许在对象中设置数据,而不是让 arange(10) 覆盖 time 变量。

读取我们刚刚创建的 NetCDF 文件

>>> from scipy.io import netcdf_file
>>> f = netcdf_file('simple.nc', 'r')
>>> print(f.history)
b'Created for a test'
>>> time = f.variables['time']
>>> print(time.units)
b'days since 2008-01-01'
>>> print(time.shape)
(10,)
>>> print(time[-1])
9

以只读方式打开的 NetCDF 文件会返回直接引用磁盘上的内存映射数据的数组

>>> data = time[:]

如果数据在关闭文件后要进行处理,则需要将其复制到主内存中

>>> data = time[:].copy()
>>> del time
>>> f.close()
>>> data.mean()
4.5

还可以将 NetCDF 文件用作上下文管理器

>>> from scipy.io import netcdf_file
>>> with netcdf_file('simple.nc', 'r') as f:
...     print(f.history)
b'Created for a test'

方法

关闭()

关闭 NetCDF 文件。

createDimension(name, length)

将维数添加到 NetCDF 数据结构的维数部分。

createVariable(name, type, dimensions)

netcdf_file 对象创建空的变量,指定其数据类型和它所使用的维数。

刷新()

如果 netcdf_file 对象处于写模式,请执行同步到磁盘的刷新操作。

同步()

如果 netcdf_file 对象处于写模式,请执行同步到磁盘的刷新操作。