2016-12-26 24 views
0

我試圖用寫一個字符串和一個浮動到一個文件:astropy.io.ascii.write字符串的文件不帶引號

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

看起來你需要3列,而不是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 
+0

很酷〜謝謝! – Sheng

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 = '"') 

你將獲得與SDSS second_1[1]

然後您返回:

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

會給:SDSS J2000 10.0000

enter image description here

正如我所說的,這是一個例子,我沒有嘗試!但邏輯在那裏。 我覺得它的存在比我一個真正的更好的答案,但它是一個辦法做到這一點

+0

感謝您的回答,並提供詳細的描述。太棒了!(*^__^*) – Sheng

相關問題