string dans un fichier netcdf

string dans un fichier netcdf - Python - Programmation

Marsh Posté le 03-06-2014 à 15:27:34    

Bonjour,  
 
Je cherche à écrire en python des données dans un fichier de type NetCDF.
J'ai défini deux variables, l'une de type float, pas de problème, mais l'autre est de type string et je n'arrive pas à la mémoriser dans mon fichier.
J'ai pas mal cherché sur les forums spécialisés mais je n'ai rien trouvé de consistant sur ce point.
 
Mon bout de code est:

Code :
  1. NVal=cdms2.createVariable( (N.zeros((nvarmax,nlat, nlon)) ),
  2.                              typecode = cdms2.MV2.float32,
  3.                              id = "val",
  4.                              attributes=att_nval)


Code :
  1. NParam=cdms2.createVariable( (OPTIONS["VARS"]),
  2.                              typecode = 'string',
  3.                              id = "param",
  4.                              attributes=att_nparam)


 
et pour le fichier:

Code :
  1. fout = cdms2.open('NVar.nc','w')
  2. fout.write( NVal )
  3. fout.write( NParam )
  4. fout.close()


 
et le mesage d'erreur:

Code :
  1. Traceback (most recent call last):
  2.   File "<stdin>", line 1, in <module>
  3. TypeError: write() got an unexpected keyword argument 'type'
  4. >>> fout.write( NParam,'string' )
  5. cdunif: NetCDF: Not a valid data type or _FillValue type mismatch
  6. cdunif: NetCDF: Not a valid data type or _FillValue type mismatch
  7. Traceback (most recent call last):
  8.   File "<stdin>", line 1, in <module>
  9.   File "/home/share/unix_files/cdat/versions/cdat_install_trunk_x86_64_gcc4_03/lib/python2.5/site-packages/cdms2/dataset.py", line 1459, in write
  10.     id=varid, extend=extend, fill_value=fill_value, index=index)
  11.   File "/home/share/unix_files/cdat/versions/cdat_install_trunk_x86_64_gcc4_03/lib/python2.5/site-packages/cdms2/dataset.py", line 1391, in createVariableCopy
  12.     newvar = self.createVariable(newname, datatype, axislist)
  13.   File "/home/share/unix_files/cdat/versions/cdat_install_trunk_x86_64_gcc4_03/lib/python2.5/site-packages/cdms2/dataset.py", line 1179, in createVariable
  14.     raise CDMSError, "Creating variable "+name
  15. cdms2.error.CDMSError: Creating variable param


 
Merci d'avance

Reply

Marsh Posté le 03-06-2014 à 15:27:34   

Reply

Marsh Posté le 07-06-2014 à 14:25:43    

Regardes la doc de ton truc cdms2, clairement tu l'utilises mal. Genre tu donnes le typecode cdms2.MV2.float32 pour la première valeur mais la chaîne 'string' pour la seconde, ça te semble pas un poil incohérent?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 10-06-2014 à 10:45:00    

Bonjour, merci pour la réponse, mais... non  ;)  
L'équivalent en string ou char pour cdms2 ne fonctionne pas. Avec mon astuce, NParam est bien déclarée
De toute façon, comme je l'expliquais, le problème n'était pas là mais dans la dernière commande, pour la mémorisation dans le fichier ;)

Reply

Marsh Posté le 10-06-2014 à 16:42:14    

essaye typecode='c' au lieu de 'string'
 

Reply

Marsh Posté le 11-06-2014 à 11:58:19    

Bonjour Fred, merci mais avec ta proposition j'ai alors le message d'erreur:

Code :
  1. Traceback (most recent call last):
  2.   File "<stdin>", line 7, in <module>
  3.   File "/home/share/unix_files/cdat/versions/cdat_install_trunk_x86_64_gcc4_03/lib/python2.5/site-packages/cdms2/tvariable.py", line 227, in __new__
  4.     order = order)
  5.   File "/home/share/unix_files/cdat/versions/cdat_install_trunk_x86_64_gcc4_03/lib/python2.5/site-packages/numpy/ma/core.py", line 2364, in __new__
  6.     _data = np.array(data, dtype=dtype, copy=copy, subok=True, ndmin=ndmin)
  7. ValueError: setting an array element with a sequence


 
Pour info, OPTIONS["VARS"] est un tableau de string: ["a0","a12", "a25", ...]
'string' ou 'S' avec ma ligne de commande fonctionne, NParam est alors bien créée

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed