【问题标题】:Widen write space in output file in python扩大python输出文件中的写入空间
【发布时间】:2015-07-28 14:15:33
【问题描述】:

我在 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()

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

【问题讨论】:

  • 你为什么不直接使用savetxt
  • 您需要正确格式化,还是只想保存实际的矩阵?
  • 如果其他解决方案不适合您,您可以使用 pickle (docs.python.org/2/library/pickle.html) 序列化矩阵。

标签: python file numpy matrix


【解决方案1】:

您的问题在于 %s'%item2 格式。它使用默认的 numpy 数组 fromatting,它将文本分成多行。如果您想对输出进行更多控制,请使用 np.savetxt,或使用该代码的功能。

制作一个长数组,并使用%s 格式化 - 注意\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.]'

savetxt 的方式制作格式 - 数组中的每个项目都有一个格式字段:

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'

结果是一行没有\n。注意tuple(item2) 的使用。这是% 格式所要求的。您可以细化fmt 以添加[] 或其他分隔符。

有一些方法可以调整默认的 numpy 打印格式,但 savetxt 采用这种直接方法。

【讨论】:

    【解决方案2】:

    你说

    “我想将每个matrix 放在一个文本文件中,以供以后访问”

    是的,那么您可以使用savetext。正如上面提到的johnsharpe

    但问题是,稍后实际上很难访问这些“matrix”,即加载回像matrix 这样的数据表单。

    这就是为什么我建议你改用pandas Dataframe 并且它也有一个save 方法,那么你将能够像以前一样轻松地取回你的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多