Teile einer CSV oder DB3 Datei auslesen

  • Themenstarter Themenstarter ByeBye 274723
  • Beginndatum Beginndatum
das ist der Inhalt
"116300197353","227.21","201.55","18.037","16.0","2022-01-03 17:03:46"
mfg
 
@mstut
Foren bieten Hilfe zur Selbsthilfe, nicht mehr und nicht weniger. Von Selbsthilfe kann bei dir aber nicht die Rede sein, du machst nur Copy/Paste.
Aber was die Hilfe angeht, gibt es Ausnahmen wie Sempervivum, die den Sinn von Foren extrem ausweiten. Ob das wirklich richtig ist, bezweifele ich allerdings.
 
Hier ist der geänderte Code, funktioniert mit der Zeile, die Du zuletzt gepostet hast:
Code:
import sys
import os
import time
import datetime
from csv import reader
import json

try:
    # Intervall in Sekunden für das Prüfen der CSV-Datei:
    intvPoll = 10
    # Anzahl von Datensätzen, die aus der
    # CSV-Datei übernommern werden sollen:
    nrData = 10
    # Intervall in Sekunden, in dem die CSS-Datei
    # aktualisiert wird:
    intvCsv = 600  # 10 Minuten
    # Parameter in der CSV-Datei
    # Schlüssel: Frei wählbarer Name
    # Wert: Der Index in der CSV-Zeile
    confParams = {
        'AIN': 0,
        'Spannung': 1,
        'Leistung': 2,
        'Zaehlerstand': 3,
        'Temperatur': 4,
        'Zeit': 5
        # Datum gelöscht
    }
    # AIN der Steckdose, die gelesen werden soll:
    ainToRead = '116300197353'  # AIN geändert
    # Dateiname der CSV-Datei:
    filenameInCsv = 'DectRead_test.csv'
    filenameOutJson = 'dect-read.json'

    # Ab hier braucht nichts mehr geändert zu werden

    # Zeitraum, innerhalb dessen Daten übernommen werden sollen
    # bzw. maximales Alter der Daten:
    maxAge = nrData * intvCsv
    # Verzeichnis dieser Skriptdatei ermitteln:
    dir = os.path.dirname(os.path.realpath(__file__))
    # Wir gehen davon aus,
    # dass Skript und CSV-Datei im selben Verzeichnis liegen:
    pathIn = dir + '\\' + filenameInCsv
    pathOut = dir + '\\' + filenameOutJson
    # Merker für Zeitstempel:
    tim = 0
    # Endlosschleife:
    while True:
        # Zeit der letzten Änderung der CSV-Datei ermitteln:
        mtime = os.path.getmtime(pathIn)
        # Hat sich die Zeit geändert?
        if(mtime > tim):
            # Neue Zeit merken:
            tim = mtime
            now = datetime.datetime.now()
            # CSV-Datei öffnen:
            with open(pathIn, 'r') as fileIn:
                output = []
                # pass the file object to reader() to get the reader object
                csv_reader = reader(fileIn)
                # Iterate over each row in the csv using reader object
                for row in csv_reader:
                    # row variable is a list that represents a row in csv
                    # print(row)
                    # Zeit für die aktuelle Zeile ermitteln:
                    timeRow = datetime.datetime.strptime(
                        row[confParams['Zeit']], "%Y-%m-%d %H:%M:%S")
                    # Datum heraus genommen, Datum und Uhrzeit sind durch
                    # Leerzeichen getrennt
                    # Alter der Daten ermittteln durch Subtrahieren der Zeit der Zeile
                    # von der Jetzt-Zeit:
                    ageRow = (now - timeRow).total_seconds()
                    # Ist das Alter der Zeile kleiner als das konfigurierte maximale?
                    if ageRow < maxAge:
                        # Gilt die Zeile für die Steckdose, die übertragen werden soll?
                        if row[confParams['AIN']] == ainToRead:
                            # Alle Parameter zum Ausgabe-Array hinzu fügen:
                            params = {}
                            for key in confParams:
                                params[key] = row[confParams[key]]
                            output.append(params)
                # Ausgabe-Array in JSON kodieren:
                with open(pathOut, 'w') as fileOut:
                    fileOut.write(json.dumps(output))
        # Konfigurierte Zeit warten:
        time.sleep(intvPoll)
except:
    print("Error at line", sys.exc_info()[2].tb_lineno, sys.exc_info())
# Zum testen, damit wir die Fehleranzeigen zu Gesicht bekommen:
input()
 
leider wieder schwarzes Bild
und keine json Datei, die hatte ich gelöscht
mfg
 
Aber was die Hilfe angeht, gibt es Ausnahmen wie Sempervivum, die den Sinn von Foren extrem ausweiten. Ob das wirklich richtig ist, bezweifele ich allerdings.
mein letztes Post dazu
Ich habe niemanden dazu gezwungen mir zu Antworten oder zu helfen
und wenn Sempervivum vorbei kommen würde gibt es Kaffe und Kuchen
und von höflichkeitsregeln hast Du noch nichts gehört, ein Hallo reicht da schon.
mfg
 
Zurück