如何解决For 循环将字符串列表添加到 NetCDF 变量,只添加最后一个值问题
我正在从许多其他文件创建一个 NetCDF 文件,我唯一的问题是获取一个字符串值并将其写入一个 NetCDF 变量。现在,下面的代码可以成功写入数据(时间、纬度、经度和其他变量),但它只获取我的站点“S”列表中的最后一个值。对于变量 station
。有两种方法可以做到这一点。一种是读取和写入我在下面列出的全局属性站名。我还有一个匹配相同值的字符串填充列表。我试过在这里搜索,但找不到。也许它在 chartostring
和 stringtochar
命令中?我在这里使用了另一个例子,alebit 没有任何循环。我想我需要额外的代码来确保它写入所有电台名称,而不仅仅是最后一个。
import netCDF4 as nc
import numpy as np
import xarray as xr
# create list of station names for dataset writing (listObsFile is list of all NetCDF files)
S = []
for i in listObsFiles:
if i.endswith('0h2021.nc'):
statID = i[8:13]
S.append(statID)
waveObsNC = nc.Dataset(file,'w')
nstrings = waveObsNC.createDimension('nstrings',len(S))
nchars = waveObsNC.createDimension('nchars',5)
station = waveObsNC.createVariable('station','S5',('station',))
v = waveObsNC.createVariable('v','S1',('nchars'))
for i in range(len(S)):
File = xr.open_dataset(filepath+'saveWave'+ str(S[i]) +'h2021.nc')
# Read in station data,deconstruct and rebuild to create valid NetCDF variable
st = File.attrs['station']
datain = np.array([st],dtype='S5')
v[:] = nc.stringtochar(datain1)
station[:] = nc.chartostring(v[:])
# waveObsNC.close()
print(station[:])
array(['51210','51210','51210'],dtype=object)
上面的替代方法是 st = S[i]
,它产生相同的站字符串值。看看这个列表:
print(S)
['41010','41040','41110','42060','42360','44020','44030','44090','46060','51000','51210']
但同样的错误:
print(station[:])
array(['51210',dtype=object)
解决方法
事实证明是我多虑了。如果我正在阅读列表 S
中的字符串列表,那么是的,我需要执行 stringtochar
和 chartostring
来解构并创建一个 VLEN 字符串变量值。但是,在从全局属性站名中获取站名的地方执行此操作意味着它显然是已在 NetCDF 文件中使用的格式正确的字符串。因此,在循环中,使用 i
索引站变量并将其等于属性站名效果很好,即:
for i in range(len(S)):
File = xr.open_dataset(filepath+'saveWave'+ str(S[i]) +'h2021.nc')
# Read in station data,deconstruct and rebuild to create valid NetCDF variable
station[i] = File.attrs['station']
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。