我正在从许多其他文件中创建一个NetCDF文件,唯一的问题是获取一个字符串值并将其写入一个NetCDF变量。现在,下面的代码可以成功地编写数据(时间、lat、lon和其他变量),但它只接受我的站点列表"S“中的最后一个值。对于变量station。有两种方法可以做到这一点。一个是读和写一个全局属性站名称,我在下面列出了这个名称。我还填充了与该值匹配的字符串列表。我试过在这里搜索但找不到。也许是在chartostring和stringtochar命令中?我在这里使用了另一个例子,几乎没有任何循环。我认为我需要额外的代码,以确保它写所有的电台名称,而不仅仅是最后一个。
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()station[:]的上述代码的输出
print(station[:])    
array(['51210', '51210', '51210', '51210', '51210', '51210', '51210',
       '51210', '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', '51210', '51210', '51210', '51210', '51210', '51210',
       '51210', '51210', '51210', '51210'], dtype=object)发布于 2021-07-21 14:06:21
结果发现我想得太多了。如果我像在list 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']https://stackoverflow.com/questions/68443517
复制相似问题