一、NetCDF文件的读取与写入
要求:
(1)读取附件中的NC文件,数据内容见MODEL.ICE.HAD187001-198110.OI198111-202206;
(2)读取出NC文件中所包含的数据种类
(3)对数据种类中SEAICE此项数据进行求均值和标准差
(4)将读取出的变量名词和均值与标准差保存进一个名称为result的TXT文件中
#开发人:dwk import netCDF4 as nc import numpy as np # 打开 NC 文件 filename = 'C:/Users/16370/Desktop/158_asphilli-20230416T2043Z/MODEL.ICE.HAD187001-198110.OI198111-202206.nc' nc_file = nc.Dataset(filename, "r") # 获取变量名称 var_names = list(nc_file.variables.keys()) # 获取 SEAICE 变量的值 seaice_data = nc_file.variables["SEAICE"][:] # 计算平均值和标准差 mean = np.mean(seaice_data) std_dev = np.std(seaice_data) # 关闭 NC 文件 nc_file.close() # 将变量名称保存到 TXT 文件 with open("result.txt", "w") as f: for name in var_names: f.write(name + "\n") f.write("SEAICE平均值:" + str(mean) + "\n") f.write("SEAICE标准差:" + str(std_dev) + "\n")
作者:XJQ 时间:2023年04月30日 """ import netCDF4 as nc def nc_r_w(fire_path,nc_name): # 读取NC文件 data = nc.Dataset(fire_path+nc_name) # 读取出数据种类 variables = data.variables.keys() # 对SEAICE数据进行求均值和标准差 if 'SEAICE' in variables: seaice_data = data.variables['SEAICE'][:] seaice_mean = seaice_data.mean() seaice_std = seaice_data.std() print('SEAICE数据的均值为:', seaice_mean) print('SEAICE数据的标准差为:', seaice_std) else: print('NC文件中不包含SEAICE数据。') v_list = list(variables) with open(fire_path + 'result.txt', 'w') as f: f.write("variables:" + str(v_list) + "\n") f.write("SEAICE_mean:"+str(seaice_mean)+"\n") f.write("SEAICE_std:" + str(seaice_std) + "\n") f.close() fire_path = 'C:\\Users\\86136\\Desktop\\3\\data\\' nc_name = 'MODEL.ICE.HAD187001-198110.OI198111-202206.nc' if __name__ == "__main__": # 引用函数 nc_r_w(fire_path,nc_name)
#作者 : cyf
from netCDF4 import Dataset import numpy as np a = Dataset("F:/file/MODEL.ICE.HAD187001-198110.OI198111-202206.nc") # 识别变量 name = a.variables.keys() print(name) ice = a.variables['SEAICE'][:] date = a.variables['date'][:] date_frac = a.variables['date_frac'][:] datesec = a.variables['datesec'][:] lon = a.variables['lon'][:] lat = a.variables['lat'][:] time = a.variables['time'][:] # 调整格式 mulArrays = ice lice = list(np.array(mulArrays).flatten()) mean = np.mean(lice) std = np.std(lice, ddof=1) print(mean) print(std) syname = str(name) # 删除多余字符 sname = syname.replace("dict_keys([","",3).replace("])","",3) smean = str(mean) sstd = str(std) li = [sname,smean,sstd] with open('result.txt', 'w') as f: for i in li: f.write(i + '\n')
# 开发人:hwy # 开发时间:2023/4/18 import netCDF4 as nc import numpy as np # 读取NC文件 data = nc.Dataset(r'F:\第三期编程\MODEL.ICE.HAD187001-198110.OI198111-202206.nc') # 读取所有变量名称 var_names = list(data.variables.keys()) # 获取SEAICE数据 seaice_data = data.variables['SEAICE'][:] # 求SEAICE数据的均值和标准差 seaice_mean = np.mean(seaice_data) seaice_std = np.std(seaice_data) # 将变量名词和SEAICE数据的均值与标准差保存到TXT文件中 with open('result.txt', 'w') as f: f.write('Variable Names: {}\n'.format(var_names)) f.write('SEAICE Mean: {}\n'.format(seaice_mean)) f.write('SEAICE Standard Deviation: {}\n'.format(seaice_std))
二、NetCDF文件的读取与绘图
要求:
(1)读取附件中的NC文件,数据内容见MODEL.SST.HAD187001-198110.OI198111-202206;
(2)读取出NC文件中所包含的数据种类
(3)根据数据中的SST数据和time数据
(4)绘制SST数据随时间序列的变化图
# 开发人:lk from netCDF4 import Dataset import numpy as np from mpl_toolkits.basemap import Basemap import matplotlib.pyplot as plt def nc_file_visualization(nc_file_path): # 读取数据 data = Dataset(nc_file_path, "r") # 打印数据种类 print(data.variables.keys()) # 取出所需数据 lon = data.variables['lon'][:] lat = data.variables['lat'][:] time = data.variables['time'][:] sst = data.variables['SST'][:] lon = lon-180 plt.ion() # 打开plt交互模式 # 绘制底图 map = Basemap() # 使用交互模式,循环打印所有数据 for t in range(sst.shape[0]): plt.cla() SST = plt.contourf(lon, lat, sst[t, :, :], cmap=plt.cm.RdBu_r) map.colorbar(SST) # 绘制地图线 map.drawcoastlines() # 绘制经纬线 map.drawmeridians(np.arange(-180, 181, 30), labels=[0, 0, 0, 1], fontsize=10, linewidth=0.3, color='grey', ) map.drawparallels(np.arange(-90, 90, 30), labels=[1, 0, 0, 0], fontsize=10, linewidth=0.3, color='grey') plt.title('time: ' + str(time[t])) # 标题 plt.pause(0.01) # 图片显示延迟 plt.ioff() if __name__ == '__main__': nc_file_path = './MODEL.SST.HAD187001-198110.OI198111-202206.nc' nc_file_visualization(nc_file_path)
# 开发人:郝文宇 # 开发时间:2023/4/18 import netCDF4 as nc import numpy as np import matplotlib.pyplot as plt from pylab import mpl plt.rcParams['font.sans-serif'] = ['SimHei'] mpl.rcParams['axes.unicode_minus'] = False # 读取NC文件 data = nc.Dataset(r'F:\第三期编程\MODEL.SST.HAD187001-198110.OI198111-202206.nc') # 读取数据种类 variables = data.variables.keys() print('数据种类:', variables) # 读取时间和SST数据 time = data.variables['time'][:] sst = data.variables['SST'][:] # 获取SST数据的形状 sst_shape = sst.shape print('SST数据的形状:', sst_shape) # 将SST数据从三维转换为二维 sst_data = sst.reshape((sst_shape[0], -1)) # 绘制SST数据随时间序列的变化图 plt.plot(time, sst_data) plt.xlabel('时间') plt.ylabel('SST') plt.title('SST数据随时间序列的变化') plt.show() # 关闭NC文件 data.close()