使用Python netCDF4将多字符字符串转换为netCDF
下面这个简单的例子展示了我如何尝试把字符串写入一个netcdf文件。对于单个字符的字符串(var1),效果是正常的。但是对于多个字符的字符串(var2),只有第一个字符被考虑到了。
from netCDF4 import Dataset
strs1 = ['a', 'b']
strs2 = ['aa', 'bb']
ds = Dataset('test.nc','w')
ds.createDimension('x', 2)
var1 = ds.createVariable('var1', 'S1', (u'x',))
var1[:] = strs1
print strs1,var1[:]
var2 = ds.createVariable('var2', 'S1', (u'x',))
var2[:] = strs2
print strs2,var2[:]
ds.close()
输出结果是这样的:
['a', 'b'] ['a' 'b']
['aa', 'bb'] ['a' 'b']
我尝试添加第二个维度,但这样也没有得到想要的结果。有没有人能解决这个问题?
补充说明:根据第一个回答,我可以通过使用第二个维度让它正常工作,效果如下:
import netCDF4
import numpy as np
strs1 = ['a', 'b']
strs2 = ['aa', 'bb']
ds = netCDF4.Dataset('test.nc','w')
ds.createDimension('x', 2)
ds.createDimension('strlen', 2)
var1 = ds.createVariable('var1', 'S1', (u'x',))
var1[:] = strs1
print strs1,var1[:]
var2 = ds.createVariable('var2', 'S1', (u'x',u'strlen'))
var2[:] = netCDF4.stringtochar(np.array(strs2))
print strs2,netCDF4.chartostring(var2[:])
ds.close()
输出结果是:
['a', 'b'] ['a' 'b']
['aa', 'bb'] ['aa' 'bb']
2 个回答
1
如果你不想增加第二个维度,只需要把'S1'改成'S2'就可以了。如果你想使用更长的字符串,比如有N个字符的字符串,就用'SN'。
1
我对netCDF4还不是很熟悉,但在处理字符串的时候,我用过netCDF4提供的两个工具方法,分别是 netCDF4.stringtochar(strs2)
和 netCDF.chartostring(strs2)
。