我正在尝试使用:
将字符串和浮点数写入文件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
答案 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)
您可以split
以space
作为分隔符,并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]
然后你回来:
print second_1[1] + second_2[0] + first[2]
将提供:SDSS J2000 10.0000
正如我所说,这是一个例子,我没有尝试过!但逻辑是存在的。 我认为这比我的答案更好,但这是一种方法