使用Python netCDF4将多字符字符串转换为netCDF

1 投票
2 回答
3465 浏览
提问于 2025-04-18 07:11

下面这个简单的例子展示了我如何尝试把字符串写入一个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)

撰写回答