scipy.io.

netcdf_file#

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

用于 NetCDF 数据的文件对象。

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

所有其他属性对应于NetCDF文件中定义的全局属性。全局文件属性通过向 netcdf_file 对象的属性赋值来创建。

参数:
文件名字符串或类文件对象

string -> 文件名

模式{‘r’, ‘w’, ‘a’}, 可选

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

mmapNone 或 bool,可选

是否在读取时对 filename 进行 mmap。当 filename 是文件名时,默认值为 True;当 filename 是类文件对象时,默认值为 False。请注意,当使用 mmap 时,返回的数据数组直接引用磁盘上的 mmap 数据,只要存在对该文件的引用,文件就无法关闭。

版本{1, 2}, 可选

要读取/写入的 netcdf 版本,其中 1 表示 经典格式,2 表示 64 位偏移格式。默认值为 1。更多信息请参见 这里

maskandscalebool, 可选

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

方法

close()

关闭 NetCDF 文件。

createDimension(name, length)

向 NetCDF 数据结构的 Dimension 部分添加一个维度。

createVariable(name, type, dimensions)

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

flush()

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

sync()

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

注释

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

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

  1. 尺寸

  2. 变量

  3. 属性

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

在向 NetCDF 文件写入数据时,通常需要指定 ‘记录维度’。记录维度是变量的无界维度。例如,温度变量可能有维度:纬度、经度和时间。如果希望随着时间的推移向 NetCDF 文件添加更多的温度数据,那么温度变量应将时间维度标记为记录维度。

此外,NetCDF 文件头包含数据在文件中的位置,因此可以通过一种高效的方式进行访问,而无需将不必要的数据加载到内存中。它使用 mmap 模块创建映射到磁盘上数据的 Numpy 数组,出于同样的目的。

请注意,当使用 netcdf_file 打开一个文件并设置 mmap=True 时(这是只读模式的默认设置),它返回的数组直接引用磁盘上的数据。如果这些数组仍然存在,文件不应关闭,并且在请求时无法干净地关闭。如果文件关闭后需要处理从mmapped Netcdf文件获取的数据数组,您可能希望复制这些数据数组,请参见下面的示例。

示例

创建一个 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'