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 对象的一个属性赋值来创建的。

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

字符串 -> 文件名

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

读写追加模式,默认为'r'

mmapNone 或 布尔值, 可选

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

version{1, 2}, 可选

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

maskandscale布尔值, 可选

是否根据属性自动缩放和/或遮罩数据。默认为 False。

方法

close()

关闭NetCDF文件。

createDimension(name, length)

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

createVariable(name, type, dimensions)

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

flush()

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

sync()

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

注意事项

此模块源自 pupynere。此模块相对于其他模块的主要优势在于它不需要代码链接到NetCDF库。然而,对于NetCDF标准的更新版本和更多功能,请考虑使用采用许可式许可证的 netcdf4-python

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

  1. 维度

  2. 变量

  3. 属性

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

将数据写入NetCDF文件时,通常需要指示“记录维度”(record dimension)。记录维度是变量的无界维度。例如,一个温度变量可能包含纬度、经度和时间维度。如果随着时间推移要向NetCDF文件添加更多温度数据,那么温度变量应将时间维度标记为记录维度。

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

请注意,当使用 netcdf_file 以 mmap=True(只读模式下的默认值)打开文件时,其返回的数组直接引用磁盘上的内存映射数据。如果这些数组仍然存在,文件就不应该关闭,也不能在请求时干净地关闭。如果您打算在文件关闭后处理从内存映射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'