Je suis en train de manipuler une table fits à l'aide de la librairie pyfits. Mon problème est que je dois créer une nouvelle table à partir de cette table. Ma nouvelle table comporte des nouvelles colonnes et d'autres doivent disparaitre. Je commence donc par récupérer le définition des colonnes de l'ancienne table:
listcolumns = oldtable[1].get_coldefs()
Ensuite, j'ajoute mes nouvelles colonnes:
col1 = pyfits.Column(name='newCol',format='E',array=numarray.array(data))
listcolumns = listcolumns.add_col(col1)
Jusque là aucun problème mais quand je veux effacer une colonne avec del_col, j'obtiens un message d'erreur. Par exemple:
listcolumns = listcolumns.del_col("toto")
me donne:
Traceback (most recent call last):
File "", line 1, in
File "/dsm/sappccosmos0/clibbrec/local/Soft/Python-2.5/lib/python2.5/site-packages/pyfits.py", line 2919, in del_col
self._nfields -= 1
File "/dsm/sappccosmos0/clibbrec/local/Soft/Python-2.5/lib/python2.5/site-packages/pyfits.py", line 2835, in __getattr__
raise KeyError, 'Attribute %s not defined.' % name
KeyError: 'Attribute _nfields not defined.'
J'ai essayé d'autres choses mais manifestement, il y a quelque chose que je ne comprend pas avec l'usage de del_col.
Si quelqu'un pouvait me filer une info ou un coup de main, je lui en serais reconnaissant.
# trouvé ça
Posté par palm123 (site web personnel) . Évalué à 1.
http://stsdas.stsci.edu/pyfits/current/source/pyfits.py
extrait
def del_col(self, col_name):
"""Delete (the definition of) one Column."""
indx = rec.index_of(self.names, col_name)
for cname in commonNames:
attr = getattr(self, cname+'s')
del attr[indx]
del self._arrays[indx]
self._nfields -= 1
C'est comparable ta manière de détruire ?
ウィズコロナ
[^] # Re: trouvé ça
Posté par KrysKhales . Évalué à 1.
[^] # Un piste ???
Posté par KrysKhales . Évalué à 1.
J'arrive à la conclusion, soit il y a un problème avec le del_col ou soit il y a une subtilité dans son usage. Mais manifestement sur tout le web, je suis le seul à vouloir effacer des colonnes d'une table fits puisque je n'ai trouvé aucun exemple où quelqu'un utilise le del_col ...
[^] # Re: Un piste ???
Posté par Sebastien . Évalué à 1.
D'apres le constructeur de ColDefs, le seul cas ou self._nfields n'est pas directement cree est lorsque l'objet en entree est du type BinTableHDU .
Dans ce cas la, toutes les donnees membres de input.columns sont copiees dans self.
Je dirais donc que le probleme se situe lors de la creation listcolumns...
Mais bon, sans le code sous la main, hein...
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.