astropy.io.ascii.write字符串到文件没有引号

时间:2016-12-26 15:31:21

标签: python ascii astropy

我正在尝试使用:

将字符串和浮点数写入文件
t=['SDSS J2000']
data=[10] 
astropy.io.ascii.write([t,data] ,'data.dat',names=['name','num'],formats={'name':'%s','num':'%f'})

输出文件是:

name num
"SDSS J2000" 10.000000

如何在没有引号的情况下将字符串写入文件,如下所示:

SDSS J2000 10.000000

2 个答案:

答案 0 :(得分:1)

您提供了2个数据和2个值,因此astropy引用了数据以便能够将其读回。

你真的 需要astropy吗?标准python使用str.format

轻松完成
t=['SDSS J2000']
data=[10]
with open("data.txt","w") as f:
    f.write("{} {} {:f}".format(*(t[0].split()+data)))

如果确实希望使用astropy实现该目标,则可以使用quotechar设置为空格(并使用该选项以避免显示标题):

astropy.io.ascii.write([t,data] ,'data.dat',names=['name','num'],format='no_header',quotechar=' ',formats={'name':'%s','num':'%f'})

写道:

  SDSS  J2000  10.000000

太多的空间,当你试图扭曲图书馆的手臂写入无法可靠回读的数据时,预计

编辑:另一种方法是让astropy写下引号并在之后删除它们,使用io.StringIO来避免写入/读取/写入磁盘:

import astropy.io.ascii
import io

t=['SDSS J2000']
data=[10]
buf=io.StringIO()
astropy.io.ascii.write([t,data] ,buf,names=['name','num'],format='no_header',formats={'name':'%s','num':'%f'})
with open("data.dat") as f:
    f.write(buf.getvalue().replace('"',""))

文件现在包含:

SDSS J2000 10.000000

答案 1 :(得分:0)

您可以splitspace作为分隔符,并split再次"作为分隔符。

例如(我不尝试):

first = str.split(string, delimiter=' ')

如果您显示结果:print first[0]给出"SDSS

然后:

second_1 = str.split(first[0], delimiter = '"')
second_2 = str.split(first[1], delimiter = '"')

您将获得带有second_1[1]

的SDSS

然后你回来:

print second_1[1] + second_2[0] + first[2]

将提供:SDSS J2000 10.0000

enter image description here

正如我所说,这是一个例子,我没有尝试过!但逻辑是存在的。 我认为这比我的答案更好,但这是一种方法