Array in Textdatei schreiben

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Sirius3
User
Beiträge: 18261
Registriert: Sonntag 21. Oktober 2012, 17:20

@ConanDerBarbar: der in Windows integrierte Editor ist notepad.exe und der ist Mist, obwohl Python eigentlich bei Text-Dateien unter Windows automatisch die richtige Zeilenendung schreiben sollte, ist vielleicht irgendeine Spyder-Geschichte.

Und die Fehlermeldung gehört eindeutig nicht zu dem gezeigten Programm, denn dort ist die Ausgabe in Zeile 8 und nicht in Zeile 15 bzw. 37, wie im Traceback angegeben.
Bitte zeige exakt den Code den Du ausführst, sonst macht das Herumraten hier keinen Sinn.
Benutzeravatar
__blackjack__
User
Beiträge: 14020
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@ConanDerBarbar: Der in Windows ”integrierte” Editor ist doch *Notepad*. Nimm einen anderen!

Wie sieht's denn aus wenn Du das Programm mal ausserhalb von der IDE startest?

Edit: Ergänzend zu Sirius3's Anmerkung zu den nicht passenden Zeilennummern – bei Spyder auch unbedingt das Programm in einem neuen, frischen Kernel ausführen.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
ConanDerBarbar
User
Beiträge: 19
Registriert: Donnerstag 21. März 2019, 00:52

@Sirius3
Ich habe das Programm eigentlich einmal laufen lassen und dann die Fehlermeldung rauskopiert. Ich habe es jetzt einfach nochmal in einer neuen Konsole gemacht. Ich glaube aber das mit den Teilen liegt daran dass der Code nicht ganz oben steht. Er ist mitten im Skript. Habe jetzt einfach nochmal den Code in die erste zeile Verschoben.

Code: Alles auswählen

import numpy as np

vT = np.full((2,3), np.nan)

vT[1, 0] = 1.1
vT[0, 1] = 2.8

with open ("Hey.txt", 'a') as doc:
    np.savetxt(doc, vT, delimiter = '\t', newline = '\n')
Mit folgender Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Users\canan\Desktop\WinPython-64bit-3.5.3.1Qt5\python-3.5.3.amd64\lib\site-packages\numpy\lib\npyio.py", line 1158, in savetxt
    fh.write(asbytes(format % tuple(row) + newline))
TypeError: write() argument must be str, not bytes

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\canan\Desktop\untitled0.py", line 9, in <module>
    np.savetxt(doc, vT, delimiter = '\t', newline = '\n')
  File "C:\Users\canan\Desktop\WinPython-64bit-3.5.3.1Qt5\python-3.5.3.amd64\lib\site-packages\numpy\lib\npyio.py", line 1162, in savetxt
    % (str(X.dtype), format))
TypeError: Mismatch between array dtype ('float64') and format specifier ('%.18e	%.18e	%.18e')

Und hier das Andere:

Code: Alles auswählen

import numpy as np

vT = np.full((2,3), np.nan)
vT[1, 0] = 1
vT[0, 1] = 2

with open("Hey.txt", 'a') as doc:
    np.savetxt(doc, vT, delimiter='\t', fmt='%1.4f')

with open('Hey.txt', 'rb') as data:
    print(data.read())
mit dem Traceback:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Users\canan\Desktop\WinPython-64bit-3.5.3.1Qt5\python-3.5.3.amd64\lib\site-packages\numpy\lib\npyio.py", line 1158, in savetxt
    fh.write(asbytes(format % tuple(row) + newline))
TypeError: write() argument must be str, not bytes

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\canan\Desktop\untitled0.py", line 8, in <module>
    np.savetxt(doc, vT, delimiter='\t', fmt='%1.4f')
  File "C:\Users\canan\Desktop\WinPython-64bit-3.5.3.1Qt5\python-3.5.3.amd64\lib\site-packages\numpy\lib\npyio.py", line 1162, in savetxt
    % (str(X.dtype), format))
TypeError: Mismatch between array dtype ('float64') and format specifier ('%1.4f	%1.4f	%1.4f')


@__blackjack__: Es muss der Editor von Windows genommen werden. Wenn das ganze Programm fertig ist (ist sehr viel größer) muss diese Textdatei von verschiedenen Leuten weiterverarbeitet werden. Und leider ist auf den meisten Computern (meines Wissens nach) als einfacher Texteditor halt eben der windows editor vorinstalliert. Und selbst wenn nicht, wissen es die meisten nicht. Ich habe also keine Wahl. Es muss dort drinnen richtig angezeigt werden...

Wenn ich das Programm aus der Konsole starte, kommt wieder die Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Users\canan\Desktop\WinPython-64bit-3.5.3.1Qt5\python-3.5.3.amd64\lib\site-packages\numpy\lib\npyio.py", line 1158, in savetxt
    fh.write(asbytes(format % tuple(row) + newline))
TypeError: write() argument must be str, not bytes

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "untitled0.py", line 8, in <module>
    np.savetxt(doc, vT, delimiter='\t', fmt='%1.4f')
  File "C:\Users\canan\Desktop\WinPython-64bit-3.5.3.1Qt5\python-3.5.3.amd64\lib\site-packages\numpy\lib\npyio.py", line 1162, in savetxt
    % (str(X.dtype), format))
TypeError: Mismatch between array dtype ('float64') and format specifier ('%1.4f        %1.4f   %1.4f')
ConanDerBarbar
User
Beiträge: 19
Registriert: Donnerstag 21. März 2019, 00:52

@__deets__ habe es gerade unter Linux ausprobiert. funktioniert ohne Probleme, mach genau das was es soll...

Scheint dann wohl ein Problem unter Windows zu sein..
da ich sowieso auf Linux programmiere, wäre mein Problem damit erstmal gelöst. Hab nur auf dem Windows die ganze Zeit das Programm laufen, weil ich die Tastatur angenehmer finde die ich da habe. Wieder was gelernt. Sollte Beispielprogramme nur auf dem Betriebssystem laufen lassen für das sie gedacht sind...
Dennoch komisch dass es unter windows nicht läuft. Die Fehlermeldung kann ja auch nicht so viel mit dem Editor zu tun haben, also muss es an windows liegen. Hab das Programm auch auf einem zweiten Windows Rechner laufen lassen und da kommen wieder die Fehlermeldungen. Mit Spyder auf Linux läuft es aber wie ein schurrendes Kätzchen.

Ich bedanke mich bei allen für die Hilfe!
Benutzeravatar
__blackjack__
User
Beiträge: 14020
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@ConanDerBarbar: Das kann durchaus auch irgendwie an Spyder liegen. Aber eventuell auch an den Versionen die da verwendet werden. Python 3.5 ist ja nun schon etwas älter, und welche Numpy-Version wird da verwendet? Denn die Stelle mit dem `str` vs. `bytes` kommt in meinem Numpy `savetxt()` nicht (mehr) vor. Die Unterstützen soweit ich weiss seit Anfang des Jahres auch nur noch Python 3, so dass solche Sonderbehandlungen nicht mehr nötig sind.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
ConanDerBarbar
User
Beiträge: 19
Registriert: Donnerstag 21. März 2019, 00:52

@__blackjack__ hab es in Windows mit Python 3.5 und einer neueren Version (weiß gerade nicht welche) ausprobiert. Numpy ist einfach mitinstalliert worden bei der instalation von Spyder, also genau wie das Programm über 2 Jahre alt. Auf meinem anderen Laptop ist halt beides vor einem halben Jahr installiert wurden. Mit den unterschiedlichen Versionen hab ich auch immer wieder das Phänomen, dass bestimmte Codeschnipsel auf der neueren Version nicht Funktionen, aber auf der älteren. Und allgemein ist auf meinem anderen Laptop (der neueren Spyder und Python Version) das Programm ziemlich instabil und hängt sich gerne auf oder stürzt ab. Manchmal funktionieren Programme auch erst nach einem Neustart von Spyder oder meinem Laptop. Habs schon mehrmals deinstalliert und neu installiert von unterschiedlichen Plattformen. hab da mehrere Versionen ausprobiert. Aber anscheinend verträgt sich mein anderer Laptop weder mit Sypder, noch Visual Studio.

Lange Rede, kurzer Sinn: Ist also gut möglich, dass auf der Python und Spyder Version meines anderen Laptops das Programm eigentlich funktioniert, nur mein Laptop einfach nicht wollte.
Antworten