在python中扩展输出文件中的写入空间

时间:2015-07-28 14:15:34

标签: python file numpy matrix

我在for循环中生成非常大的矩阵(列表列表)。我想将每个矩阵放在一个文本文件中,以便以后访问。问题是python似乎对可以放在一行上的字符数量有限制。

一个看起来像这样的矩阵:

[[a,b,c,d,e,f],[g,h,i,j,k]]

看起来像

[[a,b,c,
d,e,f],
[g,h,i,
j,k]]

当然有非常大的矩阵,所以我想扩展它可以放在一行上的字符数(无限?)

这是我写入文件的代码:

state_file = open('filename','w')

for item2 in state_lst:
    state_file.write("%s\n" % item2)
    state_file.write("\n")
    state_file.write("\n")

state_file.close()

所以它基本上将一个列表的元素(我有我的矩阵)写在一个文件中。

2 个答案:

答案 0 :(得分:1)

Your problem is with the %s'%item2 formatting. That uses the default numpy array fromatting, which splits the text into multiple lines. If you want more control over the output use np.savetxt, or use what that code does.

Make a long array, and format with %s - note the \n:

In [1417]: item2=np.arange(30.)    
In [1418]: '%s'%item2
Out[1418]: '[  0.   1.   2.   3.   4.   5.   6.   7.   8.   9.  10.  11.  12.  13.  14.\n  15.  16.  17.  18.  19.  20.  21.  22.  23.  24.  25.  26.  27.  28.  29.]'

Make a format in the way that savetxt does - one format field for each item in the array:

In [1419]: fmt=', '.join(['%5.1f']*item2.shape[0])

In [1421]: fmt%tuple(item2)
Out[1421]: '  0.0,   1.0,   2.0,   3.0,   4.0,   5.0,   6.0,   7.0,   8.0,   9.0,  10.0,  11.0,  12.0,  13.0,  14.0,  15.0,  16.0,  17.0,  18.0,  19.0,  20.0,  21.0,  22.0,  23.0,  24.0,  25.0,  26.0,  27.0,  28.0,  29.0'

The result is one line without \n. Note the use of tuple(item2). That's required by % formatting. You can refine the fmt to add [] or other delimiters.

There are ways of fiddling with the default numpy print formatting, but savetxt takes this direct approach.

答案 1 :(得分:0)

你说

  

"我想将每个matrix放在一个文本文件中,以便日后访问"

是的,您可以使用savetext。如上所述 johnsharpe

但问题是,以后很难获得这些" matrix"实际上即加载回像matrix这样的数据形式。

这就是为什么我建议你改为使用pandas Dataframe,而且它也有save方法,那么你就可以轻松取回你的数据了在此之前。