在Python 3中将数组行附加到.txt文件

时间:2017-01-13 03:45:57

标签: python-3.x numpy append newline

我只是想将我的11列单行值放入一个文本文件中,我可以添加新行。我习惯了python 2.7,我不明白为什么我的with open("testtext.txt", "wb") as myfile: np.savetxt(myfile, mydata, fmt="%.5f", delimiter=' ', newline=' ') 表现不像以前那样。

我知道这会创建我的文本文件而不会出现任何类型错误:

with open("testtext.txt", "ab") as myfile:
    np.savetxt(myfile, mynewdata, fmt="%.5f", delimiter=' ', newline=' ')

然而,当我运行我的代码以接收我需要附加的新数据时,我将其更改为:

mynewdata

它不会将\n放入新行。我已将" "输入到换行符中,我已尝试' '而不是\r\n,我已尝试{{1}}但这是一个长篇大论..请帮助,我觉得这应该是是一件简单的事情。谢谢。

2 个答案:

答案 0 :(得分:3)

再次讨论你的问题,所以,如果你的新数组(行)没有在新行中启动,那么应该是你的文本文件的最后一行没有以换行结束。正如@hpaulj指出的那样,这应该有效:

with open("testtext.txt", "wb") as myfile:
    f.write(b'\n')
    ...

如果您在Windows上运行,请选择' \ r \ n'而不是' \ n'。

答案 1 :(得分:0)

如果使用典型分隔符保存1d数组且没有特殊换行符,则每行保存一个值:

In [548]: with open('test.txt','wb') as f:
     ...:     np.savetxt(f, np.arange(3), fmt='%5d', delimiter=',')   
In [549]: cat test.txt
    0
    1
    2

使用''换行,将它们放在一行 - 但不使用\n

结束文件
In [550]: with open('test.txt','wb') as f:
     ...:     np.savetxt(f, np.arange(3), fmt='%5d', delimiter=',', newline='')

In [552]: cat test.txt
    0    1    2In [553]: 

下一个追加将在该行继续。

我可以加一个b'\n'写。这需要是一个bytestring nl。 (np.savetxt自由使用np.lib.npyio.asbytes)。

In [557]: with open('test.txt','ab') as f:
     ...:     f.write(b'\n')
     ...:     np.savetxt(f, np.arange(3), fmt='%5d', delimiter=',', newline='')

In [558]: cat test.txt
    0    1    2
    0    1    2In [559]: 

或者我应该养成在这样的\n末尾添加savetxt写的习惯。

或者,我可以确保我将2d数组写入文件,即使我只想写一行。将数组包装在列表中就可以了。考虑savetxt迭代'行' (第一维)输入,一次写一行(用fmt,分隔符和换行符格式化)。

In [559]: with open('test.txt','wb') as f:
     ...:     np.savetxt(f, [np.arange(3)], fmt='%5d', delimiter=',')

In [560]: cat test.txt
    0,    1,    2

In [561]: with open('test.txt','ab') as f:
     ...:     np.savetxt(f, [np.arange(4)], fmt='%5d', delimiter=',')

In [562]: cat test.txt
    0,    1,    2
    0,    1,    2,    3