scipy.io.netcdf_file¶
- class scipy.io.netcdf_file(filename, mode='r', mmap=None, version=1, maskandscale=False)[源代码]¶
NetCDF数据的文件对象。
A
netcdf_file
对象有两个标准属性: dimensions 和 variables 。两者的值都是字典,分别将维度名称映射到其关联的长度,将变量名称映射到变量。应用程序不应修改这些字典。所有其他属性都对应于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数据结构有三个主要部分:
尺寸标注
变量
属性
维度部分记录变量使用的每个维度的名称和长度。然后,变量将指示它使用的维度和任何属性(如数据单位),并包含变量的数据值。最好包括一个与维度同名的变量,以提供该轴的值。最后,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
对象处于写入模式。