代码展示
以CHM_PRE_0.1dg_19612022.nc文件为例。
首先是查看nc文件的基本信息
import netCDF4 as nc # 读取nc文件需要下载netCDF4库
import matplotlib.pyplot as plt
import numpy as np
# 打开下载的.nc文件
nc_file = nc.Dataset('CHM_PRE_0.1dg_19612022.nc', 'r') # 'r'表示只读模式
# 查看文件的维度
# print(nc_file.dimensions)
# 查看文件的变量,文件包括经纬度、年份、时间、降雨、站点信息5个变量
# print(nc_file.variables.keys())
# dict_keys(['longitude', 'latitude', 'years', 'time', 'pre', 'station_number'])
查看各个变量的信息
latitude = nc_file.variables['latitude'][:] # ''中是你想要读取的变量名称
longitude = nc_file.variables['longitude'][:]
station_number = nc_file.variables['station_number'] # 三维数组 float32 station_number(years, latitude, longitude)
pre = nc_file.variables['pre'] # 三维数组 float32 pre(time, latitude, longitude)
time = nc_file.variables['time'][:] # 一维数组24h
years = nc_file.variables['years'][:]
# print(station_number)
# print(pre) # (22645, 360, 640)
# print(time) # 24h
# print(latitude) # (360,)
# print(longitude) # (640,)
# print(years) # 1961-2022
获取指定经纬度的降雨数据
上面的数据中可看出从1961-2022每24h一个降雨数据一共有22645个数据。我们还可以发现纬度信息和降雨信息的第二列对应,都是360,经度也一样都是640。在打印经纬度时发现有纬度为38.15°,经度为114.55°的点,我以此点为例获取该点22645个降雨数据。其实原理很简单,只要找出经纬度所在的索引就可以获取降雨数据,而降雨变量中经纬度索引和经纬度变量索引相同。
# 伪代码,获取降雨数据的基本原理。
pre[:,index(latitude),index(longitude)]
index(latitude) = index(38.15)
index(longitude) = index(114.55°)
# 真实代码
arr1 = []
for i in range(len(latitude)):
arr1.append(latitude[i])
print(arr1.index(38.15)) # 索引为201
arr2 = []
for j in range(len(longitude)):
arr2.append(longitude[j])
print(arr2.index(114.55)) # 索引为425
arr3 = pre[:, 201, 425]
# 将该点降雨数据写入文件
with open('output1.txt', 'a') as file:
for k in range(len(arr3)):
print(arr3[k])
file.write(f'{arr3[k]}\n')
部分结果: