astropy.io.ascii.write 不带引号的文件字符串
astropy.io.ascii.write string to file without quotes
我正在尝试使用以下方法将字符串和浮点数写入文件:
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
您可以 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 = '"')
您将获得 SDSS second_1[1]
那么你 return :
print second_1[1] + second_2[0] + first[2]
将给出:SDSS J2000 10.0000
正如我所说,这是一个例子,我没试过!但逻辑就在那里。
我认为它确实存在比我的更好的答案,但这是一种方法
您提供了 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
设置为space(并使用选项来避免显示 header):
astropy.io.ascii.write([t,data] ,'data.dat',names=['name','num'],format='no_header',quotechar=' ',formats={'name':'%s','num':'%f'})
这里写道:
SDSS J2000 10.000000
太多 spaces,当你试图扭曲图书馆的手臂写入无法可靠地读回的数据时预期
编辑:另一种方法是让 astropy
写下它的引号然后删除它们,使用 io.StringIO
避免 writing/reading/writing 到磁盘:
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
我正在尝试使用以下方法将字符串和浮点数写入文件:
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
您可以 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 = '"')
您将获得 SDSS second_1[1]
那么你 return :
print second_1[1] + second_2[0] + first[2]
将给出:SDSS J2000 10.0000
正如我所说,这是一个例子,我没试过!但逻辑就在那里。 我认为它确实存在比我的更好的答案,但这是一种方法
您提供了 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
设置为space(并使用选项来避免显示 header):
astropy.io.ascii.write([t,data] ,'data.dat',names=['name','num'],format='no_header',quotechar=' ',formats={'name':'%s','num':'%f'})
这里写道:
SDSS J2000 10.000000
太多 spaces,当你试图扭曲图书馆的手臂写入无法可靠地读回的数据时预期
编辑:另一种方法是让 astropy
写下它的引号然后删除它们,使用 io.StringIO
避免 writing/reading/writing 到磁盘:
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