netcdf_file#
- class scipy.io.netcdf_file(filename, mode='r', mmap=None, version=1, maskandscale=False)[源代码]#
用于 NetCDF 数据的文件对象。
netcdf_file
对象有两个标准属性:dimensions 和 variables。它们的值都是字典,分别将维度名称映射到它们的相关长度,将变量名称映射到变量。应用程序不应修改这些字典。所有其他属性都对应于 NetCDF 文件中定义的全局属性。全局文件属性通过分配给
netcdf_file
对象的属性来创建。- 参数:
- filename字符串或类文件对象
字符串 -> 文件名
- mode{‘r’, ‘w’, ‘a’}, 可选
读-写-追加模式,默认为 ‘r’
- mmapNone 或 bool, 可选
读取时是否对 filename 进行内存映射。当 filename 是文件名时,默认为 True;当 filename 是类文件对象时,默认为 False。请注意,当使用内存映射时,返回的数据数组直接指向磁盘上的内存映射数据,只要存在对其的引用,就无法关闭该文件。
- version{1, 2}, 可选
要读取/写入的 netcdf 版本,其中 1 表示经典格式,2 表示64 位偏移格式。默认为 1。有关更多信息,请参阅此处。
- maskandscalebool, 可选
是否基于属性自动缩放和/或屏蔽数据。默认为 False。
说明
此模块相对于其他模块的主要优点是它不需要代码链接到 NetCDF 库。此模块源自 pupynere。
NetCDF 文件是一种自描述的二进制数据格式。该文件包含描述文件中维度和变量的元数据。有关 NetCDF 文件的更多详细信息,请参阅此处。NetCDF 数据结构主要分为三个部分
维度
变量
属性
维度部分记录变量使用的每个维度的名称和长度。然后,变量将指示它使用哪些维度以及任何属性(例如数据单位),以及包含变量的数据值。最好包含一个与维度名称相同的变量,以提供该轴的值。最后,属性部分将包含其他信息,例如文件创建者的名称或用于收集数据的仪器。
当将数据写入 NetCDF 文件时,通常需要指示“记录维度”。记录维度是变量的无界维度。例如,温度变量可能具有纬度、经度和时间的维度。如果想要随着时间的推移向 NetCDF 文件添加更多温度数据,则应将温度变量的时间维度标记为记录维度。
此外,NetCDF 文件头包含数据在文件中的位置,因此可以高效地访问数据,而无需将不必要的数据加载到内存中。它使用
mmap
模块来创建映射到磁盘上数据的 Numpy 数组,以达到相同的目的。请注意,当
netcdf_file
用于打开 mmap=True(读取时默认为 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'
方法
close
()关闭 NetCDF 文件。
createDimension
(name, length)向 NetCDF 数据结构的维度部分添加一个维度。
createVariable
(name, type, dimensions)为
netcdf_file
对象创建一个空变量,指定其数据类型和使用的维度。flush
()如果
netcdf_file
对象处于写入模式,则执行同步到磁盘的刷新。sync
()如果
netcdf_file
对象处于写入模式,则执行同步到磁盘的刷新。