Python 从NetCDF文件读取值并将其写入csv文件

Python 从NetCDF文件读取值并将其写入csv文件,python,csv,netcdf,Python,Csv,Netcdf,我有一个NetCDF文件,其中包含以下信息: 尺寸: lon = 238; lat = 132; dep = 38; time = 8; 变量: float lon(lon=238); float lat(lat=132); float dep(dep=38); double time(time=8); float eastward_sea_water_velocity(time=8, dep=38, lat=132, lon=238); float northward_sea_water_v

我有一个NetCDF文件,其中包含以下信息:

尺寸:

lon = 238;
lat = 132;
dep = 38;
time = 8;
变量:

float lon(lon=238);
float lat(lat=132);
float dep(dep=38);
double time(time=8);
float eastward_sea_water_velocity(time=8, dep=38, lat=132, lon=238);
float northward_sea_water_velocity(time=8, dep=38, lat=132, lon=238);
我想读取lon、lat、东向海水速度和北向海水速度,并将值写入csv文件

因此,csv文件将如下所示:

Lon Lat E-Vel N-Vel

28.4511 41.8866 -3.7 -6.3
到目前为止,我只成功地读取了lon和lat,并将它们写入csv:

x,y = ncfile.variables['lon'], ncfile.variables['lat']
import csv
with open('text2.csv', 'w') as f:
    writer = csv.writer(f, delimiter='\t')
    header = ['Longitude', 'Latitude']
    writer.writerow(header)
    writer.writerows(zip(x,y))

f.close()
当我尝试打印“东向海水速度”的值时,使用以下代码:

temp = ncfile.variables['eastward_sea_water_velocity']
print temp
我的产出是:

<type 'netCDF4.Variable'>
float32 eastward_sea_water_velocity(time, dep, lat, lon)
_FillValue: -999.0
missing_value: -999.0
units: m s-1
long_name: u-component of current
standard_name: eastward_sea_water_velocity
scale_factor: 0.01
add_offset: 0.0
source: MHI NASU Hydrodinamical model version V2
valid_min: -5.0
valid_max: 5.0
unlimited dimensions: 
current shape = (8, 38, 132, 238)
[[[[-- -- -- ..., -- -- --]
[-- -- -- ..., -- -- --]
[-- -- -- ..., -- -- --]
..., 
[-- -- -- ..., -- -- --]
[-- -- -- ..., -- -- --]
[-- -- -- ..., -- -- --]]

漂浮32向东的海水流速(时间、深度、纬度、经度)
_填充值:-999.0
缺少_值:-999.0
单位:m s-1
long_名称:电流的u分量
标准名称:向东海水流速
比例系数:0.01
添加偏移量:0.0
资料来源:MHI NASU流体动力学模型V2版
最低有效值:-5.0
有效_最大值:5.0
无限尺寸:
当前形状=(8、38、132、238)
那么,我如何读取变量“东向海水速度”的值呢


提前非常感谢!祝你一切顺利

使用
print temp[:]
或根据变量的形状
print temp[:,:,:,:]

当我尝试使用以下选项打印时:

print temp[:,:,:,:]
结果是:

<type 'netCDF4.Variable'>
float32 eastward_sea_water_velocity(time, dep, lat, lon)
_FillValue: -999.0
missing_value: -999.0
units: m s-1
long_name: u-component of current
standard_name: eastward_sea_water_velocity
scale_factor: 0.01
add_offset: 0.0
source: MHI NASU Hydrodinamical model version V2
valid_min: -5.0
valid_max: 5.0
unlimited dimensions: 
current shape = (8, 38, 132, 238)
[[[[-- -- -- ..., -- -- --]
[-- -- -- ..., -- -- --]
[-- -- -- ..., -- -- --]
..., 
[-- -- -- ..., -- -- --]
[-- -- -- ..., -- -- --]
[-- -- -- ..., -- -- --]]
但是,我确信变量有值,因为我用Panoply打开文件,看到了值


附言:可能来自,可以帮助我

经度和纬度是1D变量,表示表示多维数据的x轴和y轴的水平坐标。
zip()
所做的是从每个列表中获取项目对,因此即使您从该语句中获得了输出,它也没有写入文件中所有可能的lon、lat对。因为向东的海水速度是四维的,所以问题更大。为简单起见,我们假设您只需要固定时间和深度的该数据的2D切片:

lon = ncfile.variables['lon']
lat = ncfile.variables['lat']
# Grab 2D slice for time index 0 and depth index 0
u = ncfile.variables['eastward_sea_water_velocity'][0, 0]
import csv
import numpy as np
with open('text2.csv', 'w') as f:
    writer = csv.writer(f, delimiter='\t')
    writer.writerow(['Longitude', 'Latitude', 'E-Vel'])
    for inds,val in np.ndenumerate(u):
      writer.writerow([lon[inds[0]], lat[inds[1]], val])

向我们显示生成此输出的代码,否则我们无法为您调试。这是正确的方法,但最后一行有一个小错误:您希望以列表形式传递writerow参数,即
[lon[inds[0]],lat[inds[1]],val]
。已修复,谢谢。(这就是为什么我不应该在文本字段中编写代码。)