2017-01-13 42 views
1

我只是试图将我的11列单行值放入可附加新行的文本文件中。我习惯于python 2.7,我不明白为什么我的np.savetxt的行为与以前不一样。将数组行添加到Python中的.txt文件3

我知道,这将创造我的文本文件,而无需任何类型的错误:

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但是那是一个很长的..请帮助,我觉得这应该是一件简单的事情。谢谢。

回答

2

再次审视您的问题,如果您的新数组(行)未在新行中启动,那么应该是您的文本文件的最后一行不是以换行符结束。因此,作为@hpaulj指出,这应该工作:

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

如果你在Windows上运行,采取 '\ r \ n' 而不是 '\ n'。

+0

非常感谢@这个工作,我确实需要使用'\ r \ n'! – layces

0

如果保存有典型的分隔符,并没有特殊的换行一维数组,这样可以节省每行一个值:

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'写。这需要是一个字节串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]: 

或者,也许我应该在这样一个savetxt年底加入\n写的习惯。

或者,我可以确保我写了一个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 
相关问题