Seite 1 von 1

Numpay Arrays und Kommentare in Textdatei speichern

Verfasst: Dienstag 25. Oktober 2016, 09:37
von Kniffte
Hallo Zusammen,

ich habe zwei Numpy-arrays der Form (41, 4). Nun möchte ich beide Arrays in eine Textdatei speichern.
Zusätzlich sollen aber am Anfang der Datei vor dem ersten Array sowie zwischen dem ersten und zweiten Array noch Kommentar/ Textzeilen eingefügt werden. Bsp.:

Code: Alles auswählen

Datensatz xyz
Begin Daten 1
1, 2, 3, 4
5, 6, 7, 8
...
Begin Daten 2
7, 8, 9, 10
11, 12, 13, 14
...
Mit der Funktion numpy.savetxt() kann ich leider nur einen Array verarbeiten und dort kopf- und fußzeilen definieren. So fehlt mir aber der zweite Array bzw. wenn ich beide Arrays zu einem vereine, fehlt mir die Kommentarzeile zwischen beiden Arrays.

Nun habe ich mir übelegt die Kommentare und Arrays in eine Liste zusammenzufügen und diese elementweise in eine Textdatei zu schreiben. Hier stoße ich aber auf ein Problem, dass die Zeilen der Arrays mit 4 Elementen als '[1, 2, 3, 4]' in jede Zeile der Textdatei gespeichert werden, so dass ich hier nochmal alle Zeilen der Liste formatieren müsste, um am Ende in der Textdateizeile '1,2,3,4' zu erhalten.

Gibt es für mein Vorhaben einen eleganteren Lösungsweg? ggf. ohne die Arrays in Listen umzuwandeln?

Gruß Seb

Re: Numpay Arrays und Kommentare in Textdatei speichern

Verfasst: Dienstag 25. Oktober 2016, 09:48
von BlackJack
@Kniffte: Ich habe es jetzt nicht ausprobiert, aber Du kannst `savetxt()` auch ein Dateiobjekt übergeben. Also sollte es möglich sein selbst eine Datei zum schreiben zu öffnen und diese als Argument an zwei `savetxt()`-Aufrufe zu übergeben.

Re: Numpay Arrays und Kommentare in Textdatei speichern

Verfasst: Dienstag 25. Oktober 2016, 12:30
von Kniffte
@BlackJack:
Das Übergeben der geöffneten Datei an mehrere 'savetxt()' funktioniert. Danke

Code: Alles auswählen

import os

import numpy as np

def main():

    test_array = np.array([[1,2],[3,4],[5,6]])
    current_cwd = os.getcwd()
    file_name = "testfile.txt"
    opened_file = open(os.path.join(current_cwd, file_name), mode='wb')
    np.savetxt(opened_file, test_array, fmt='%-.5f', delimiter=',', newline='\n', 
                     header='Closed Arc Length\nBegin Curve 1\n', footer='Begin Curve 2\n', comments='')
    np.savetxt(opened_file, test_array, fmt='%-.5f', delimiter=',', newline='\n', comments='')

if __name__ == '__main__':
    main()
Jedoch hab ich jetzt das Problem, dass die '\n' ignoriert werden.
Ich vermute, dass es am 'binary mode' liegt. Wenn ich die Datei jedoch im 'text mode' öffne, dann erhalte ich folgenden Fehler:

Code: Alles auswählen

Traceback (most recent call last):                                                                                            
  File "test.py", line 25, in <module>                                                                                        
    main()                                                                                                                    
  File "test.py", line 16, in main                                                                                            
    header='Closed Arc Length\nBegin Curve 1\n', footer='Begin Curve 2\n', comments='')                                       
  File "C:\Users\ssb\AppData\Local\Continuum\Anaconda3\lib\site-packages\numpy\lib\npyio.py", line 1147, in savetxt           
    fh.write(asbytes(comments + header + newline))                                                                            
TypeError: write() argument must be str, not bytes
Weiß jmd eine Lösung?

Re: Numpay Arrays und Kommentare in Textdatei speichern

Verfasst: Dienstag 25. Oktober 2016, 13:35
von BlackJack
@Kniffte: Werden die wirklich ignoriert oder erwartest Du einfach was anderes, nämlich \r\n statt \n?

Re: Numpay Arrays und Kommentare in Textdatei speichern

Verfasst: Dienstag 25. Oktober 2016, 14:25
von Kniffte
@BlackJack:
:) Oh man...wird doch nichts ignroriert. Danke nochmal :)
Aber was ich jetzt nicht verstehe:
Im Windows Texteditor zeigt er mir den Inhalt der Datei in einer Zeile an.
Im Codeeditor (bei mir Visual Studio Code) zeigt er die Zeilenumbrüche und Inhalt steht in mehreren Zeilen zu sehen.
Woran liegt das?

Re: Numpay Arrays und Kommentare in Textdatei speichern

Verfasst: Dienstag 25. Oktober 2016, 14:41
von Sirius3
@Kniffte: Wie BlackJack schon geschrieben hat, liegt der Unterschied im Zeilenende: \r\n <-> \n. Während jeder benutzbare Editor mit beidem klar kommt, ist Notepad da etwas eigen. Will man das einigermaßen systemunabhängig haben, muß man statt "\n" einfach os.linesep benutzen, oder Notepad nicht benutzen.

Re: Numpay Arrays und Kommentare in Textdatei speichern

Verfasst: Dienstag 25. Oktober 2016, 14:49
von Kniffte
@Sirius3: Ok...verstanden. Danke für den Tipp :)