Python 使用netCDF4读写多个nc文件以及截取指定经纬度范围内的数据生成新的nc文件
时间: 2024-02-20 13:02:09 浏览: 98
对于多个nc文件,可以使用循环遍历每个文件的方式来读取和处理数据。以下是一个示例代码,可以读取多个nc文件,并根据指定的经纬度范围截取需要的数据,并将截取到的数据写入到新的nc文件中。
```python
from netCDF4 import Dataset
import numpy as np
import os
# 文件夹路径
folder_path = "/path/to/folder/"
# 获取经纬度范围
lon_range = [lon_min, lon_max] # 经度范围
lat_range = [lat_min, lat_max] # 纬度范围
# 循环遍历文件夹中的所有nc文件
for file_name in os.listdir(folder_path):
if file_name.endswith(".nc"):
file_path = os.path.join(folder_path, file_name)
# 读取nc文件
nc_file = Dataset(file_path, mode="r")
# 获取经纬度和变量数据
lons = nc_file.variables["lon"][:]
lats = nc_file.variables["lat"][:]
data = nc_file.variables["variable_name"][:]
# 截取指定经纬度范围内的数据
lon_index = np.where((lons >= lon_range[0]) & (lons <= lon_range[1]))[0]
lat_index = np.where((lats >= lat_range[0]) & (lats <= lat_range[1]))[0]
data_subset = data[lat_index[0]:lat_index[-1]+1, lon_index[0]:lon_index[-1]+1]
# 新建nc文件并写入数据
new_nc_file = Dataset("new_" + file_name, mode="w", format="NETCDF4")
new_nc_file.createDimension("lon", len(lon_index))
new_nc_file.createDimension("lat", len(lat_index))
new_lon = new_nc_file.createVariable("lon", np.float32, ("lon",))
new_lon[:] = lons[lon_index]
new_lat = new_nc_file.createVariable("lat", np.float32, ("lat",))
new_lat[:] = lats[lat_index]
new_data = new_nc_file.createVariable("variable_name", np.float32, ("lat", "lon"))
new_data[:] = data_subset
new_nc_file.close()
# 关闭nc文件
nc_file.close()
```
在这里,代码先循环遍历文件夹中的所有以`.nc`结尾的文件,然后读取每个文件的经纬度和变量数据。接着,根据指定的经纬度范围截取需要的数据,并将截取到的数据写入到新的nc文件中。注意,在使用完nc文件后,需要将其关闭。
阅读全文