Seite 1 von 1

Python Code optimierbar?

Verfasst: Freitag 23. März 2018, 14:44
von ICookie
Hallo,

nochmal kurz eine Frage:
Kann ich an diesem Code irgendetwas optimieren? Mich persönlich stört es, dass ich Uhrzeit und Datum trennen musste, aber wenn ich das mit ";" im String getrennt hätte, hätte das quotechar in der csv wieder ein ' ' davor gemacht und das will ich nicht. Gibt es dafür eine bessere Lösung?

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import serial, time, struct, csv
from datetime import datetime as DateTime

ser = serial.Serial()
ser.port = "/dev/feinstaub"
ser.baudrate = 9600

ser.open()
ser.flushInput()

byte, lastbyte = "\x00", "\x00"

#STRINGS
OUTPUT_FILENAME = "/home/pi/Documents/Feinstaubdaten/Feinstaubdaten{:%Y%m%d_%H%M%S}.csv"
Name = ["Feinstaubsensor"]
Beschriftung = ["Datum","Uhrzeit","PM2.5","PM10"]
Datum = "{:%Y:%m:%d}"
Uhrzeit = "{:%H:%M:%S}"

while True:
    lastbyte = byte
    byte = ser.read(size=1)
    
    if lastbyte == "\xAA" and byte == "\xC0":
        sentence = ser.read(size=9)
        readings = struct.unpack('<HHxxBBB',sentence)

        
        pm_25 = readings[0]/10.0
        pm_10 = readings[1]/10.0

        with open(OUTPUT_FILENAME.format(DateTime.now()), 'a') as csvfile:
            output = csv.writer(csvfile, delimiter=';', escapechar=' ', quoting=csv.QUOTE_NONE)
            output.writerow(Name)
            output.writerow(Beschriftung)
            output.writerow([Datum.format(DateTime.now()), Uhrzeit.format(DateTime.now()), pm_25, pm_10])
        
        time.sleep(5)
Danke!

Re: Python Code optimierbar?

Verfasst: Freitag 23. März 2018, 15:05
von Sirius3
@ICookie: Die Parameter kann man sertial.Serial direkt bei der Initalisierung übergeben. lastbyte wird in Zeile 14 ein Wert zugewiesen, der nie benutzt wird. DateTime.now sollte nur einmal aufgerufen werden, sonst sind die einzelnen Angaben nicht synchron.

Re: Python Code optimierbar?

Verfasst: Freitag 23. März 2018, 22:14
von ICookie
Und wie mache ich das am besten?

Re: Python Code optimierbar?

Verfasst: Samstag 24. März 2018, 03:04
von Sirius3
Was konkret verstehst Du denn nicht?

Re: Python Code optimierbar?

Verfasst: Samstag 24. März 2018, 12:00
von ICookie
Wie ich das mache, dass ich Datetime.now nur einmal aufrufen muss, weil sonst eben das oben genannte Problem auftritt. Hab schon alles probiert was ich ansatzweise wusste.

Re: Python Code optimierbar?

Verfasst: Samstag 24. März 2018, 12:16
von __deets__
Wenn man etwas nur einmal tun will, aber das Ergebnis mehrfach benutzen, dann muss man sich das merken. In einer Variablen.

Code: Alles auswählen

a = tuwas()
print(a, a, a, a,)

Re: Python Code optimierbar?

Verfasst: Montag 26. März 2018, 15:34
von ICookie
Ich hab's jetzt mal so gemacht:

Code: Alles auswählen

from datetime import datetime

now = datetime.now().strftime("%Y-%m-%d;%H:%M:%S")
Datum, Uhrzeit = now.split(";")
Geht das auch noch einfacher oder passt das so?