2016-07-21 10 views
1

die strukturierte Array wie folgt zu haben:Probleme mit Newline-Parameter in numpy savetxt Funktion

[ (b'H', 0.9425, 0.1412, 7.1414) ... (b'N', 1.0037, 4.0524, 6.8000)]

Ich möchte ein .txt file mit numpy.savetxt machen, wobei jedes Element des Arrays in Zeile geschrieben:

H 0.9425 0.1412 7.1414 
N 1.0037 4.0524 6.8000 

Ich setze die newline='\n' aber es funktioniert nicht richtig und alle Elemente sind in einer Zeile geschrieben. Das gleiche Problem mit Header Parameter, der angegebene Header wird auch in der gleichen Zeile gedruckt.

Jetzt sieht es aus wie diese:

29Shifts: 1.0 3.0 7.0b'C' 1.0029 3.5098 7.9883 b'N' 1.0039 4.0586 6.8008 
29Shifts: 1.0 4.0 0.0b'C' 1.0029 4.5078 0.9873 b'N' 1.0039 5.0586 -0.2000 
29Shifts: 1.0 5.0 9.0b'C' 1.0029 5.5078 9.9844 b'N' 1.0039 6.0586 8.7969 

Hier sind die Parameter verwendet:

np.savetxt(outfile, recarray, fmt=[b'%s','%-7.4f','%-7.4f','%-7.4f'], delimiter=' ', newline='\n', header='29\nShifts: 1.0 1.0 3.5\n', comments='') 

Danke

+0

Könnten Sie juste 2-3 Zeilen Rohdaten drucken? Nicht ein Array bitte – Deadpool

Antwort

0

Ich frage mich, ob es ein Problem mit \n auf Ihrem System; vielleicht benutzt Python einen Wert, während der Dateibetrachter einen anderen Wert erwartet (es gibt Dos-, Linux- und Mac-Standards).

Ich habe kein Problem mit diesen Daten und Format in einer Ipython-Sitzung auf einem Linux-Rechner.

In [88]: d=[ (b'H', 0.9425, 0.1412, 7.1414),(b'N', 1.0037, 4.0524, 6.8000)] 
In [89]: data=np.array(d,'|S1,f,f,f') 
In [90]: data 
Out[90]: 
array([(b'H', 0.9424999952316284, 0.1412000060081482, 7.14139986038208), 
     (b'N', 1.0037000179290771, 4.0524001121521, 6.800000190734863)], 
     dtype=[('f0', 'S1'), ('f1', '<f4'), ('f2', '<f4'), ('f3', '<f4')]) 

In [91]: np.savetxt('test.txt', data,fmt =[b'%s','%-7.4f','%-7.4f','%-7.4f']) 

In [92]: cat test.txt 
b'H' 0.9425 0.1412 7.1414 
b'N' 1.0037 4.0524 6.8000 

In [93]np.savetxt('test.txt', data,fmt=[b'%s','%-7.4f','%-7.4f','%-7.4f'], 
    delimiter=' ', newline='\n', header='29\nShifts: 1.0 1.0 3.5\n', comments ='') 

In [94]: cat test.txt 
29 
Shifts: 1.0 1.0 3.5 

b'H' 0.9425 0.1412 7.1414 
b'N' 1.0037 4.0524 6.8000 
+1

eigentlich, ich setze 'newline = '\ r \ n'' und es funktioniert jetzt. Ich habe einen einfachen Windows-Editor verwendet, um die Datei zu öffnen. aber ich verstehe nicht, warum 'newline = '\ n'' nicht funktioniert. BTW, mit 'newline = '\ n'' kann ich Datei in UEDIT32 öffnen und dann gibt es kein Problem. –

+0

Windows verwendet 2 Zeichen am Ende einer Zeile, eine "Return" und eine "Newline". Unix verwendet nur einen. Python, das unter Windows läuft, sollte dies beachten und das Doppelzeichen verwenden. Aber eine Datei, die auf einem Linux-Rechner geschrieben wurde, muss möglicherweise konvertiert werden, wenn sie an Windows übertragen wird. Bessere Editoren können jedoch mit jedem Stil (oder dem MAC) umgehen. – hpaulj

+0

ok, jetzt verstehe ich es. eine kleine Frage dazu. Wie man die b Zeichen vor Buchstaben loswird? Weil ich diese Art von Linie haben möchte ** H 0.9425 0.1412 7.1414 **. Muss ich die erste Spalte durch die neue ersetzen, indem ich die alte mit '.decode ('UTF-8')' Methode bearbeite? Danke –