【问题标题】:Write array to text file将数组写入文本文件
【发布时间】:2015-05-21 21:24:21
【问题描述】:

我正在尝试按照此处使用此代码找到的示例将 5x3 数组写入文本文件。

import numpy as np
data = np.loadtxt('array_float.txt')
with open('out.txt', 'w') as outfile:
    for data_slice in data:
        np.savetxt(outfile, data_slice, fmt='%4.1f')

这会导致以下错误:

File C:\Python34\lib\site-packages\numpy\lib\npyio.py", line 1087, in savetxt
  fh.write(asbytes(format % tuple(row) + newline))
TypeError: must be str, not bytes

看来 savetxt 不喜欢 outfile 对象。当我指定实际的输出文件名时,我可以让 savetxt 工作。例如,这有效:

np.savetxt('out.txt', data_slice, fmt='%4.1f')

但只有数组的最后一行被保存到“out.txt”。

【问题讨论】:

    标签: python python-3.x numpy


    【解决方案1】:

    您应该以二进制模式打开文件(使用ab 或wb)

    import numpy as np
    data = np.loadtxt('array_float.txt')
    with open('out.txt', 'ab') as outfile:
        for data_slice in data:
            np.savetxt(outfile, data_slice, fmt='%4.1f')
    

    【讨论】:

    • 谢谢,这行得通,但数组都在输出文件中的一行上。如何让数组的每一行写入输出文件中的新行?
    • @DaveLeighton 试试np.savetxt(outfile, data_slice, fmt='%4.1f', newline="\n")
    • 是的,这是我尝试的第一件事,但它并没有改变输出。仍然都在一条线上。
    • @RafaelCardoso:对于以二进制模式打开文件的 Windows 系统的可移植性,不应该类似于 newline=os.linesep 吗? Windows 文本编辑器通常将\n 本身视为纯空格或什么都没有,并且只有\r\n 实际上被呈现为换行符。毕竟默认已经是\n了,所以newline="\n"不会改变行为。
    【解决方案2】:

    我建议你使用 Python 的 pickle 模块。它允许以极少的复杂性或代码行保存任何数组。

    试试这个:

    import pickle
    f = open(name_of_file,'w')
    pickle.dump(f,name_of_array)
    f.close()
    

    【讨论】:

      猜你喜欢
      • 2014-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 2018-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多