2014-03-12 25 views
4

我想將numpy.savetxt的結果加載到字符串中。基本上沒有中間文件,下面的代碼:numpy savetxt到字符串

import numpy as np 

def savetxts(arr): 
    np.savetxt('tmp', arr) 
    with open('tmp', 'rb') as f: 
     return f.read() 

回答

4

可以使用StringIO(或cStringIO):

該模塊實現了文件 - 像StringIO類一樣,讀取和寫入字符串緩衝區(也稱爲內存文件)。

該模塊的描述說明了一切。只是StringIO一個實例傳遞給np.savetxt,而不是文件名:

>>> s = StringIO.StringIO() 
>>> np.savetxt(s, (1,2,3)) 
>>> s.getvalue() 
'1.000000000000000000e+00\n2.000000000000000000e+00\n3.000000000000000000e+00\n' 
>>> 
+0

正如@ Tom-pohl提到的那樣,它不適用於'StringIO',但它可以與使用python3的'BytesIO'協同工作。你知道爲什麼它不起作用嗎? – Ger

+1

@Ger對不起,我對python3沒有太多的經驗。 – sloth

4

對於Python 3.x都有可以使用io模塊:

>>> import io 
>>> s = io.BytesIO() 
>>> np.savetxt(s, (1, 2, 3), '%.4f') 
>>> s.getvalue() 
b'1.0000\n2.0000\n3.0000\n' 

>>> s.getvalue().decode() 
'1.0000\n2.0000\n3.0000\n' 

注:我不能讓io.StringIO()到工作。有任何想法嗎?