2017-01-13 4 views
1

Ich versuche einfach, meine 11-Spalte, einzelne Reihe von Werten in eine Textdatei, an die ich neue Zeilen anhängen kann. Ich bin an Python 2.7 gewöhnt und ich verstehe nicht, warum meine np.savetxt nicht das gleiche Verhalten wie zuvor ist.Anfügen von Array-Zeilen an TXT-Datei in Python 3

Ich weiß, dass dies meine Textdatei erstellen, werden alle Art Fehler ohne:

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

Jedoch, wenn ich dann meinen Code ausführen meine neue Daten zu empfangen, die ich anfügen müssen, und ich ändern Sie es an:

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

Es setzt mynewdata nicht in eine neue Zeile. Ich habe eingegeben \n in Newline, ich habe versucht " " anstelle von ' ', ich habe versucht \r\n, aber das war ein Longshot .. Bitte helfen, ich fühle mich wie das sollte eine einfache Sache sein. Vielen Dank.

Antwort

2

Gehen Sie Ihre Frage erneut, also, wenn Ihr neues Array (Zeile) nicht in einer neuen Zeile gestartet, das sollte die letzte Zeile der Textdatei wurde nicht mit Zeilenumbruch beendet. So wie @hpaulj darauf hingewiesen, sollte diese Arbeit:

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

Wenn Sie auf Windows laufen, nehmen '\ r \ n' statt '\ n'.

+0

Danke @Will, das hat funktioniert und ich musste '\ r \ n' verwenden! – layces

0

Wenn Sie einen 1D-Array mit typischen Trennzeichen und ohne spezielle Newline speichern, speichert es einen Wert pro Zeile:

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 

Mit ‚Newline‘, legt sie eine Zeile auf - aber endet die Datei ohne ein \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]: 

Der nächste Anhang wird in dieser Zeile fortgesetzt.

Ich könnte eine b'\n' schreiben schreiben. Dies muss ein bytestring nl sein. (np.savetxt macht liberalen Gebrauch von 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]: 

Oder vielleicht sollte ich am Ende eines solchen savetxt eine Gewohnheit des Hinzufügens eines \n Schreib machen.

ODER, ich könnte einfach sicherstellen, dass ich ein 2d-Array in die Datei schreiben, auch wenn ich nur eine Zeile schreiben möchte. Das Wrappen des Arrays in einer Liste wird den Trick machen. Denken Sie an savetxt Iteration auf die 'Zeilen' (erste Dimension) der Eingabe, und Schreiben einer Zeile zu einer Zeit (formatiert mit fmt, Trennzeichen und Zeilenumbruch).

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