使用Astropy向fits文件添加一列

3

我有一些事件数据的fits文件,需要通过同一表中预先存在的列中存储的数据派生出新的数据列,并修改其中一个表格。 我遇到的问题是如何关闭修改后的文件。以下是代码:

data = fits.open(events, extname='events')
t1 = data[1].data.field('time')
table = Table.read(events, format='fits')
t2 = Column(name='T2', data=t1)
table.add_column(t2)

如何在与输入文件相同的文件上关闭文件写入?如果我尝试使用table.write(events, format='fits')会因为写入到已存在的文件而出现错误,但是如果我尝试关闭data,修改将不会被写入文件。


1
这个问题看起来是一个重复的问题:http://stackoverflow.com/questions/21046500/adding-a-new-column-to-a-fits-file-via-python?rq=1 抱歉。 - Py-ser
新版本中也有add_col,但仍无法使用... - Py-ser
1
这个问题应该被标记为重复,没错。但我也建议不要尝试使用pyfits进行任何类型的表格操作。相反,使用astropy将FITS文件读入astropy的表格类中,进行更改,并将其写入新文件。由于表格始终按行顺序存储在FITS中,因此向FITS表格添加列本质上是困难的。 - Iguananaut
Iguananaut,谢谢。然而,在其他话题中问题并没有得到真正的回答。为什么您建议使用astropy而不是pyfits?您能否提供一个astropy执行我相同/类似任务的示例? - Py-ser
我以为你说的是 pyastro 而不是 astropy(对于 pyastro,我找不到与我的任务相关的任何内容)。这里有一些好的(未经测试的)例子:http://docs.astropy.org/en/latest/table/index.html - Py-ser
我试图将帖子标记为重复,但是我无法这样做,因为原始帖子也没有答案。我应该写自己的答案吗? - Py-ser
1个回答

1
他们最近添加了一个覆盖选项(类似于常见的):
table.write(events, format='fits', overwrite='True')

你添加并接受自己的答案是可以的,因为你可能已经解决了自己的问题。但是,这并没有实际回答你最初提出的问题,也无法对未来的读者有所帮助。 - Iguananaut
我修改了原来的主题,因为我解决了部分原始问题。然后我提供了“最终”答案,以便其他用户可以受益。 - Py-ser
正如@Iguananaut所暗示的那样,请小心更改您问题的含义。如果有人已经回答了,特别是更改问题是非常糟糕的事情。在这种情况下,您最初的问题并不是很好,但这个问题稍微好一些 - 但请记住要小心更改这样的问题。 - Andrew Barber
1
这里应该是 overwrite=True(Python 内置常量 True,而不是字符串 'True')。这个方法之所以可行,是因为在 Python 中非空字符串被视为类似于 true 的值。所以 overwrite='False' 仍然会启用覆盖。需要注意的一点... - Iguananaut

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接