Seite 1 von 1

xlsxwriter Liste konstant weiterführen endlos

Verfasst: Donnerstag 3. Oktober 2019, 09:35
von starstrike
Hallo zusammen,
mein Python Projekt schreitet immer weiter voran.
Ich hab Analoge Messwerte in Temperatur umgerechnet.
Ich möchte alle 10 Sekunden messen und diesen Wert in einer Excel Tabelle speichern. Dazu natürlich Datum und Uhrzeit(falls jemand direkt Ideen hat).
Es ist nur ein Ausschnitt aus dem gesamten Code.

Code: Alles auswählen

import  xlsxwriter
import time

workbook = xlsxwriter.Workbook('Temperatur1.xlsx',{'constant_memory': True}) #unsicher mit constant_memory
worksheet = workbook.add_worksheet()

worksheet.set_column('A:A', 20)
bold = workbook.add_format({'bold': True})
worksheet.write('A1', 'Datum', bold)
worksheet.write('B1', 'Uhrzeit', bold)
worksheet.write('C1', 'Temperatur', bold)


Temp1= (Temp1_R_AmPT100_1-100)/0.39 ## die Temperatur die in die Excel Tabelle soll.

x=1
while True:
			print (Temp1) 	#ich möchte erstmal noch sehen, welche Temp er misst.
			time.sleep(5)
			worksheet.write(x, 2, Temp1) #Die Temperatur ist in der Variablen Temp1, x soll mit jedem Durchlauf +1 um die Werte 		 
                                                                               untereinander zu schreiben ggf nicht zu überschreiben
			#worksheet.write(1, 1, 666) #Uhrzeit extra auskommentiert
			#worksheet.write(1, 0, 666) #Datum extra auskommentiert
			x = x + 1	# weiter zählen
			workbook.close()
ich habs mit for schleifen usw probiert. Er soll nicht aufhören alle 10 Sekunden einen Messwert untereinander in die Spalte Temperatur zu schreiben. Ich hoffe das ist soweit richtig... Er soll nur einmal das Dokument erstellen und immer wieder reinschreiben ohne zu überschreiben.
Vielleicht habe ich gerade nur einen Knick im Denken, sitze hier schon mehrere Stunden und komme nicht auf die Lösung.
Es wäre super wenn jemand direkt noch eine Lösung für aktuelles Datum+Uhrzeit hat.

Gruß aus NRW

Re: xlsxwriter Liste konstant weiterführen endlos

Verfasst: Donnerstag 3. Oktober 2019, 12:29
von __deets__
Gibt es eine Grund, warum du nicht einfach eine CSV Datei schreibst? Excel verarbeitet die problemlos , und da neue Zeilen anzuhängen ist dank Dateimodus „a“ einfach und robust.

Re: xlsxwriter Liste konstant weiterführen endlos

Verfasst: Donnerstag 3. Oktober 2019, 12:33
von starstrike
wie meinst du?
die messwerte in eine csv datei schreiben? wie bekomm ich die in excel mit Datum und Uhrzeit?
Bitte links zu den passenden Anleitungen...

Gruß aus NRW

Re: xlsxwriter Liste konstant weiterführen endlos

Verfasst: Donnerstag 3. Oktober 2019, 12:37
von Sirius3
Excel ist kein Format, mit dem man einen Wert nach dem anderen schreiben könnte. Das wird einmal mit Zahlen gefüllt und gespeichert. Wenn Du Zeile für Zeile die Temperatur speichern willst, nimm CSV. Datum und Uhrzeit sind ein Feld, nicht zwei. Zum Arbeiten mit Zeiten gibt es das datetime-Modul.

`Temp1_R_AmPT100_1` ist nicht definiert. Variablen werden nach Konvention klein geschrieben; benutze keine Abkürzungen, also temperatur statt temp. Was soll denn die 1 bei Temp1?
`x` wird üblicherweise für eine Kommazahl verwenden, einen Index würde man `i` nennen. Das ist aber bei CSV sowieso nicht nötig.

Re: xlsxwriter Liste konstant weiterführen endlos

Verfasst: Donnerstag 3. Oktober 2019, 12:46
von starstrike
Ich messe 8 Temperaturen. Ggf am Spannungsteiler die Spannung und errechne mir damit meine Temperatur.
Zur Vereinfachung hab ich nur Temp1 hier aufgelistet.

Re: xlsxwriter Liste konstant weiterführen endlos

Verfasst: Donnerstag 3. Oktober 2019, 13:09
von __deets__
Das beantwortet nicht die gestellten Fragen. Zur fortlaufenden Speicherung ist Excel nicht ideal. Reine Textdateien, oder eine Datenbank (mit sqlite ja schon eingebaut in Python) sind dazu geschaffen. Erstere liest Excel problemlos ein. Letztere koenntest du zB mit einem aehnlichem Skript wie deinem dann bei Bedarf in CSV oder sogar Excel konvertieren - dann hat man aber auch schon alle Daten beeinander.

Re: xlsxwriter Liste konstant weiterführen endlos

Verfasst: Donnerstag 3. Oktober 2019, 13:58
von starstrike
ich habe mal ein bisschen gelesen und rumprobiert.

Code: Alles auswählen

while True:
	Temp1_Umrechnen1 = readAnalogData(ADC_Channel, SCLK, MOSI, MISO, CS)
	Temp1_R_AmPT100_1 = ((Temp1_Umrechnen1*0.0032)*330)/(3.3*(1-((Temp1_Umrechnen1*0.0032)/3.3)))
	Temp1= (Temp1_R_AmPT100_1-100)/0.39
			#print('Der Widerstand des PT100(1) betraegt:'), (Temp1_R_AmPT100_1)
			#print (Temp1)
			#print (Temp1),('C')
	Temperatur1 = open('Temperatur1.csv',mode='a')
	Temperatur1.write(str(Temp1))
	Temperatur1.write('\n')
	Temperatur1.close()
	time.sleep(5)
	
Er speichert mir nun alle 5 Sekunden die Temperatur in einer csv Datei.
Wenn ich diese Datei nun mit Excel öffne, schreibt er mir die Werte in die Erste Spalte untereinander.
in der 1. Soll aber Datum, in der 2. Zeit und in der 3. die Temperatur stehen.
Wie stelle ich das an? Es gibt viel zu viel zu diesem Thema im Internet...Panda usw usw
Vielleicht kann mir jemand dabei helfen.

Gruß aus NRW

Re: xlsxwriter Liste konstant weiterführen endlos

Verfasst: Donnerstag 3. Oktober 2019, 14:02
von __deets__
Zuerstmal ist das permanente öffnen und schließen nicht notwendig. Einmal am Anfang öffnen reicht. Und das am besten mit dem with-Konstrukt damit man das schließen automatisch macht bei Abbruch oder Fehlerfall.

Und wenn du Datum, Zeit und Temperatur in einer Zeile willst, dann musst du auch alles drei schreiben. Mit zB Komma separiert.

Re: xlsxwriter Liste konstant weiterführen endlos

Verfasst: Donnerstag 3. Oktober 2019, 14:44
von Sirius3
Wie man das mit der Zeit macht, habe ich doch schon geschrieben.

Eingerückt wird immer mit vier Leerzeichen pro Ebene und zur Schreibweise von Varialben habe ich Dir auch schon geschrieben. `umrechnen` ist eine Tätigkeit, Variablen beinhalten aber Zustand, das passt nicht. Liest sich nicht flüssig.

Code: Alles auswählen

with open("temperatur1.csv", mode="a", encoding="ASCII") as ausgabe:
    while True:
        spannung = readAnalogData(ADC_Channel, SCLK, MOSI, MISO, CS)
        widerstand = ((spannung*0.0032)*330)/(3.3*(1-((spannung*0.0032)/3.3)))
        temperatur = (widerstand-100) / 0.39
        ausgabe.write(f"{temperatur}\n")
        ausgabe.flush()
        time.sleep(5)

Re: xlsxwriter Liste konstant weiterführen endlos

Verfasst: Donnerstag 3. Oktober 2019, 15:25
von starstrike
Danke, hab es umständlicher auch hinbekommen. Deine Variante werde ich auch testen. 👍
Nun geht es an das Diagramm. A1= Datum B1=Uhrzeit C1= Temperatur.
Das Diagramm füllt sich nun von selbst. Wie erstelle ich ein passendes Diagramm dazu? 🤔
Außerdem sollen die Temperaturen interaktiv in einer Gui zu sehen sein. Tipps und Tricks für die richtige Richtung?

Gruß aus nrw