2017-01-13 90 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 
相關問題