scipy.io.netcdf_file

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

NetCDF数据的文件对象。

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

所有其他属性都对应于NetCDF文件中定义的全局属性。全局文件属性是通过将 netcdf_file 对象。

参数
filename字符串或类似文件

字符串->文件名

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

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

mmap无或bool,可选

是否映射 filename 在阅读的时候。出现以下情况时,默认值为True filename 是文件名,如果 filename 是一个类似文件的对象。请注意,当mmap正在使用时,返回的数据数组直接引用磁盘上的mmaps数据,只要存在对该文件的引用,就不能关闭该文件。

version{1,2},可选

要读/写的netcdf版本,其中1表示 经典格式 和2个意思是 64-bit offset format 。默认值为1。请参阅 here 了解更多信息。

maskandscale布尔值,可选

是否根据属性自动缩放和/或屏蔽数据。默认值为False。

注意事项

与其他模块相比,此模块的主要优势在于它不需要将代码链接到NetCDF库。此模块派生自 pupynere

NetCDF文件是自描述的二进制数据格式。该文件包含描述文件中的维度和变量的元数据。有关NetCDF文件的更多详细信息,请参阅 here 。NetCDF数据结构有三个主要部分:

  1. 尺寸标注

  2. 变量

  3. 属性

维度部分记录变量使用的每个维度的名称和长度。然后,变量将指示它使用的维度和任何属性(如数据单位),并包含变量的数据值。最好包括一个与维度同名的变量,以提供该轴的值。最后,Attributes部分将包含附加信息,如文件创建者的名称或用于收集数据的工具。

将数据写入NetCDF文件时,通常需要指明“记录维度”。记录维度是变量的无界维度。例如,温度变量可以具有纬度、经度和时间维度。如果希望随着时间的推移向NetCDF文件添加更多温度数据,则温度变量应该将时间维度标记为记录维度。

此外,NetCDF文件头包含数据在文件中的位置,因此可以高效地进行访问,而无需将不必要的数据加载到内存中。它使用 mmap 模块来创建映射到磁盘上的数据的Numpy数组,以实现相同的目的。

请注意,当 netcdf_file 用于打开mmap=True的文件(默认为只读),它返回的数组直接引用磁盘上的数据。文件不应关闭,并且在询问此类阵列是否处于活动状态时也不能干净利落地关闭。如果要在关闭文件后处理从mmaped Netcdf文件获得的数据数组,您可能需要复制这些数据数组,请参阅下面的示例。

示例

要创建NetCDF文件,请执行以下操作:

>>> from scipy.io import netcdf
>>> f = netcdf.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
>>> f = netcdf.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.base.base
<mmap.mmap object at 0x7fe753763180>

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

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

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

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

方法:

close \()

关闭NetCDF文件。

createDimension \(名称,长度)

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

createVariable \(名称,类型,尺寸)

为创建一个空变量 netcdf_file 对象,并指定其数据类型和使用的维度。

flush \()

如果出现以下情况,请执行同步到磁盘刷新 netcdf_file 对象处于写入模式。

sync \()

如果出现以下情况,请执行同步到磁盘刷新 netcdf_file 对象处于写入模式。