Maximalwerte diverser Messungen in eine gemeinsame Textdatei schreiben

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
fuchur1337
User
Beiträge: 3
Registriert: Dienstag 4. September 2018, 12:57

Guten Tag,
ich versuche mich derzeit an Niederschlagsdateien, was aber bei meinem Problem keine wirkliche Rolle spielt. Noch bin ich relativ am Anfang meiner Pythonkarriere :lol: Also bin ich für jeden Tipp dankbar.

Das Problem habe ich in den unteren größeren Kommentaren zu meinem Code beschrieben.Es geht im Groben um das wiederholte Speichern von Werten aus mehreren Dateien in einer gemeinsamen .txt Datei.
Ich benutze Python Version 3.6 momentan unter Windows.

Falls jemand hier einen kleinen Tipp hätte,wäre ich sehr dankbar
Grüße Fuchur


Code: Alles auswählen

 #Importieren der notwendigen Bibliotheken
import wradlib as wrl
import matplotlib.pyplot as pl
import numpy as np
import os

#Verzeichnis angeben

dir=os.path.join('cygdrive','D:\data\tobias\vergleich hdf-rv\rvdaten2016678\rv160602_19h_20h')		#Einlesen der Datei
print("Verzeichnis: ",dir)


#Daten auslesen für die 1. Stunde der Vorhersage


rvdata,rvattrs=wrl.io.read_radolan_composite('D:/Data/RV1608281400_005_MF002')
rvdata1,rvattrs1=wrl.io.read_radolan_composite('D:/Data/RV1608281400_005_MF002')
rvdata2,rvattrs2=wrl.io.read_radolan_composite('D:/Data/RV1608281400_010_MF002')
rvdata3,rvattrs3=wrl.io.read_radolan_composite('D:/Data/RV1608281400_015_MF002')
rvdata4,rvattrs4=wrl.io.read_radolan_composite('D:/Data/RV1608281400_020_MF002')
rvdata5,rvattrs5=wrl.io.read_radolan_composite('D:/Data/RV1608281400_025_MF002')
rvdata6,rvattrs6=wrl.io.read_radolan_composite('D:/Data/RV1608281400_030_MF002')
rvdata7,rvattrs7=wrl.io.read_radolan_composite('D:/Data/RV1608281400_035_MF002')
rvdata8,rvattrs8=wrl.io.read_radolan_composite('D:/Data/RV1608281400_040_MF002')
rvdata9,rvattrs9=wrl.io.read_radolan_composite('D:/Data/RV1608281400_045_MF002')
rvdata10,rvattrs10=wrl.io.read_radolan_composite('D:/Data/RV1608281400_050_MF002')
rvdata11,rvattrs11=wrl.io.read_radolan_composite('D:/Data/RV1608281400_055_MF002')
rvdata12,rvattrs12=wrl.io.read_radolan_composite('D:/Data/RV1608281400_060_MF002')

#Bilden der Stundensumme des Niederschlags für die 1. Stunde

summe_1h=(rvdata+rvdata1+rvdata2+rvdata3+rvdata5+rvdata6+rvdata7+rvdata8+rvdata9+rvdata10+rvdata11+rvdata12)

Maxwert_test1=summe_1h[776:802,531:557]             #Maximalwerte über 3 mm für einen bestimmten Ausschnitt
Maxwerte_1h=Maxwert_test1[Maxwert_test1>3]          

#Ausgabe der Maximalwerte und des Maximalwertes

print("Stundensumme > 3: ",Maxwerte_1h)
print("Maximalwert der Stundensumme 1h: ", np.max(Maxwerte_1h)) 


#Schreiben der Maximalwerte in eine Textdatei

datei = open('Maxwerte_1h.txt','a',newline='\n')         
x=Maxwerte_1h                                           
np.savetxt("Maxwerte_1h.txt",x)

#Maximalwerte in Textdatei speichern funktioniert einmalig für die erste Stunde um Punkt 14:00 Uhr.Wenn ich nun das Programm bei der #nächsten Dateien durchlaufen lasse( z.B.: 14:05) ,werden die Werte in der Textdatei überschrieben und nicht angehängt.Ich dachte, durch 'a' #wird es angehängt an den vorherigen Teil?Wo ist mein Denkfehler?


Maxwert_1h=np.max(Maxwerte_1h)                       #Ermitteln des höchsten Maximalwertes

datei2=open('Maxwert_1h.txt','a',newline='\n')            #Den höchsten Maximalwert in Textdatei speichern
datei2.write(str(Maxwert_1h))

#Hier wird alles so gespeichert,wie es soll.Auch bei der Anwendung auf die nächste Datei wird der neue Wert nun angehängt.Das Problem #hier ist, dass ich gerne jeden Wert in einer eigenen Zeile vorliegen hätte,der neue höchste Maximalwert aber wirklich direkt an den #vorherigen Wert der letzten Dateien angehängt wird ohne einen Zeilenumbruch oder ein Leerzeichen.(egal was ich bisher getestet habe)
#Habt ihr irgendwelche Ideen? Vielen Dank im Voraus :-)

fuchur1337
User
Beiträge: 3
Registriert: Dienstag 4. September 2018, 12:57

Als Ergänzung noch: Das erste Verzeichnis,was ich mir anzeigen lasse spielt keine Rolle.Und es kommt keine Fehlermeldung,sondern es passiert nich das,was ich erwartet hätte, wie oben beschrieben..
Benutzeravatar
__blackjack__
User
Beiträge: 13006
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@fuchur1337: Das erste Verzeichnis, oder besser den Verzeichnisnamen den Du dir anzeigen lässt ist ja auch ziemlich sicher falsch, denn da sind Escapezeichen wie \t drin. Das ist *ein* Zeichen, nämlich ein Tabulatorzeichen.

`numpy.savetxt()` überschreibt die Datei. Das Du die Datei vorher mit `open()` im Anfügemodus geöffnet hast ist davon völlig unabhängig. `datei` wird ja auch nirgends verwendet. Du müsstest bei `savetxt()` nicht den Dateinamen sondern eben dieses Dateiobjekt übergeben. Und dann solltest Du Dateien die Du öffnest auch wieder schliessen. Am besten schaust Du Dir dazu mal die ``with``-Anweisung an.

Beim zweiten musst Du halt noch ein Zeilenende nach dem Wert schreiben. Also beispielsweise ``datei.write(f'{maxwert_1h}\n')``. Ich habe hier mal die unsinnige Nummer bei `datei2` weggelassen und mich bei der Variable an die Namenskonventionen gehalten: Style Guide for Python Code.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

Die erste Datei `RV1608281400_005_MF002` wird zweimal geladen. Ist das Absicht? Statt durchnummerierte Variablennamen benutzt man Listen und Schleifen. Die magischen Indexwerte bei `summe_1h[776:802,531:557]` machen ein Programm sehr fehleranfällig. Woher kommen die?
`datei` öffnet eine Datei, die nicht benutzt wird.
Dateien die man öffnet sollte man auch wieder schließen, am besten, indem man mit dem with-Statement arbeitet.
Das neue-Zeile-Zeichen '\n' mußt Du explizit in die Datei schreiben.
fuchur1337
User
Beiträge: 3
Registriert: Dienstag 4. September 2018, 12:57

Vielen Dank für die Hilfe an euch!
@_blackjack_,@Sirius3 : auch wenn es off-topic ist (aber interessant :-) ) : das erste Verzeichnis war zum testen.Mir wurde gesagt, dass dies auf diese Weise mit 'cygdrive' und \ möglich ist(ja,ich bin mir der Funktion von cygdrive bewusst).Das wollte ich ausprobieren und bei mir wird dann auch das richtige Verzeichnis angezeigt ohne irgendeinen Fehler?

Zum Thema:
Mir war nicht klar, dass durch numpy.savetxt() die Datei überschrieben wird.Ich dachte, es wird ganz normal gespeichert und auch angehängt,war ja ein großer Fehler meinerseits.Ich hab wohl Dateinamen und - objekt durcheinander gebracht.Die with-Anweisung kannte ich bisher noch gar nicht(Schande über mein Haupt),aber nun funktioniert der erste Teil auf jeden Fall wie es soll.Das"datei" konnte ich streichen natürlich..

Zum zweiten Teil:
Das war ja simpel im Nachhinein,wenn man es weiß...

Es war keine Absicht,die Datei zweimal einzuladen..danke sehr. Das mit den Listen und Schleifen ist mir klar.Ich wollte erst einmal schauen inwieweit python und ich miteinander auskommen.Das Programm möchte ich dann demnächst auf einen großen Datensatz anwenden und dafür verwende ich dann auch Schleifen.Da hab ich ja auch keine Wahl dann :-D . Die Indexwerte muss ich so explizit nehmen,da ich einen genauen geograf. Ausschnitt betrachten möchte.

Also vielen Dank nochmal für die Hilfe.Hat mir zum Verstehen viel gebracht.(vor allem die with-Anweisung) und zum Lösen natürlich auch.

PS: ich werde nun erstmal den Style-Guide durcharbeiten
Viele Grüße
Antworten