[AstroPy] PyFITS: Appending tables with variable length array...?

Erik Bray embray at stsci.edu
Fri May 6 16:56:03 EDT 2011


Yeah, that looks like a bug to me.  When you create the new hdu with 
nrows=nr, the length of the VLA column does not get extended.  Normally 
you shouldn't have to do any special treatment for VLA columns at all, 
actually.

Here's a workaround that worked for me:

for idx in range(len(t1[1].columns)):
     col = t1[1].columns[idx]
     if col.format[0] == 'P':
         hdu.columns[idx].array = np.resize(col.array, nr)
         hdu.data._convert[idx] = hdu.columns[idx].array
     hdu.data.field(idx)[nr1:] = t2[1].data.field(idx)


It's a hack, but it should work--this replaces the existing VLA column 
with one that's extended out the right size.  I'll add a bug report for 
this issue.

Thanks,
Erik


On 05/06/2011 01:11 PM, Taro Sato wrote:
> Hi there.  I'm trying to do something simple with PyFITS, appending
> tables but running into a problem.
>
> The manual provides a general procedure for tables with no varlen
> arrays, which I mostly follow in the code snippet below.
>
> import pyfits as pf
>
> ...
>
> t1 = pf.open(fits1)
> t2 = pf.open(fits2)
>
> nr1 = t1[1].data.shape[0]
> nr2 = t2[1].data.shape[0]
> nr = nr1 + nr2
> hdu = pf.new_table(t1[1].columns, nrows=nr)
> for i in range(len(t1[1].columns)):
>      if i == 4:
>          # this is a variable length array column; need to
>          # work on row by row
>          for j, x in enumerate(t2[1].data.field(i)):
>              print((nr, nr1+j))
>              hdu.data.field(i)[nr1+j] = x
>              continue
>      # for non variable length column, this is fine
>      hdu.data.field(i)[nr1:] = t2[1].data.field(i)
>
>
> The conditional was added to take care of a variable length array
> column (#5).  But this doesn't work...
>
> So my question is, how do we do this?  Is it at all possible to update
> values in a varlen array column?  Is my only option to create a new
> table from scratch?
>
> Thank you for your time,
> Taro
> _______________________________________________
> AstroPy mailing list
> AstroPy at scipy.org
> http://mail.scipy.org/mailman/listinfo/astropy



More information about the AstroPy mailing list