如何将 astropy 表的标题和单位保存到 ascii 文件中
Posted
技术标签:
【中文标题】如何将 astropy 表的标题和单位保存到 ascii 文件中【英文标题】:How do I save the header and units of an astropy Table into an ascii file 【发布时间】:2016-03-28 11:27:01 【问题描述】:我正在尝试创建一个 ascii 表,其中包含一些关于标题的信息、列的名称和单位以及一些数据,它应该如下所示:
# ... Header Info ...
Name | Morphology | ra_u | dec_u | ...
| InNS+B+MOI | HH:MM:SS.SSS | ±DD:MM:SS:SSS| ...
==============| ========== | ============ | ============ | ...
1_Cam_A | I | 04:32:01.845 | +53:54:39.03 ...
10_Lac | I | 22:39:15.679 | +39:03:01.01 ...
...
到目前为止,我已经尝试使用 numpy.savetxt 和 astropy.ascii.writhe,numpy 并不能真正解决我的问题,而使用 ascii.write 我已经能够得到类似但不太正确的东西:
Name | Morphology | ra_u | dec_u | ...
================== | ========== | ============ | ============ | ...
1_Cam_A | I | 04:32:01.845 | +53:54:39.03 ...
...
我正在使用此代码:
formato= 'Name':'%-23s','Morphology':'%-10s','ra_u':'%s','dec_u':'%s',...
names=['Name','Morphology','ra_u','dec_u','Mag6']
units=['','InNS+B+MOI','HH:MM:SS.SSS','±DD:MM:SS:SSS',...]
ascii.write(data, output='pb.txt',format='fixed_width_two_line',position_char='=',delimiter=' | ',names=names, formats=formato)
因此,如果我在终端中进行打印,则表格看起来应该除了标题信息外,但当我将其保存到文件中时,单位会消失...
有没有办法将它们包含在文件中?或者我需要保存文件并稍后编辑它?
PD:我还尝试了一些其他格式,例如用于 ascii.write 的 IPAC,在这种情况下,问题在于标题中包含第 4 行,例如:'|空 | null |.....' 我不知道如何摆脱它...
感谢您的帮助
不敬礼。
【问题讨论】:
我对你的例子有点困惑。在您的示例中,data
是什么类型的对象?如果它是一个 Astropy 表,你的“单位”是如何存储的,因为它们在任何意义上都不是 astropy 识别的单位——只是一些任意字符串(来自它的 POV)。当您在示例中调用 ascii.write()
时,您也不会对“单位”做任何事情。我不知道是否有必要,但您也可以按照此处所述定义自定义读取器/写入器:docs.astropy.org/en/stable/io/ascii/…
【参考方案1】:
似乎没有一种直接的方法可以使用astropy.table
或astropy.io.ascii
以通用方式写出列的单位。您可能想通过功能请求在https://github.com/astropy/astropy/issues 提出问题。
但是,使用ascii.ipac
格式有一个非常简单的解决方法:
tbl.write('test.txt', format='ascii.ipac')
with open('test.txt', 'r') as fh:
output = []
for ii, line in enumerate(fh):
if ii not in (1,3):
output.append(line)
with open('test.txt', 'w') as fh:
fh.writelines(output)
它将以 IPAC 格式写出,然后删除第 2 行和第 4 行。
【讨论】:
是的,这就是我的想法...翻动文件,然后悔改并编辑它...也应该以某种方式与“fixed_width”等其他格式一起使用我会提出这个问题谢谢【参考方案2】:除非您的绝对表必须采用这种格式,否则如果您想要一个包含更复杂的列元数据的 ASCII 表,请考虑使用ECSV 格式。
【讨论】:
我尝试了ECSV
格式并且不适合我的需要,最后我想我会使用IPAC
和' | ' 作为分隔符......这足够接近,也很容易被人们阅读,Python,IDL 和 VO......无论如何感谢您的回答以上是关于如何将 astropy 表的标题和单位保存到 ascii 文件中的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Astropy 中将 AltAz 坐标转换为赤道坐标
Astropy Units equivalencies - 使用类和 SI 前缀的干涉测量基线