Return von einem Dictionary und auf die Einzelnen werte wieder zugreifen von einer Funktion

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
telegraph
User
Beiträge: 31
Registriert: Mittwoch 6. November 2013, 10:59

Hallo zusammen,

ich habe mir eine Funktion geschrieben welche aus einer liste mit CSV Dateien ein Dictionary macht, nun möchte ich wieder auf diese werte zugreifen. Stehe Aber grade voll auf dem Schlauch. Könnte mir jemand einen Tipp geben wie ich dies weiter verarbeiten könnte. Diese sollen dann in einzelne Tabellen in einer Datenbank geschrieben werden.

Code: Alles auswählen

def value_select1(datei_value=creat_Device1_list()):

    diclist = []
    for i in datei_value:
        liste = []
        with open(i) as f:
            reader = csv.reader(f, delimiter=';')
            for row in reader:
                liste.append(row)
            dictionary = dict(zip(liste[6], liste[7]))
            diclist.append(dictionary)

    return diclist

Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@telegraph: der Default-Wert von `datei_value` ist seltsam. `datei_value` scheint eine Liste mit Dateinamen zu sein; dann nenn die auch so: `filenames`. Aus dem Kontext heraus müßte `i` dann `filename` heißen. Zeile 10 ist dann wieder seltsam. Stehen die Daten in Zeile 6 und 7 nebeneinander? Normerweise sind in csv-Dateien gleichartige Daten untereinander geschrieben.

Welcher Art Daten sind das, und was willst Du damit machen? Diese Fragen beantworten Dir auch, wie Du die Daten strukturieren solltest und wie Du dann darauf zugreifst.
telegraph
User
Beiträge: 31
Registriert: Mittwoch 6. November 2013, 10:59

Ich habe einen Ordner in den alle 5 Minuten eine CSV Datei gepusht wird, von einem FTP Server, da sind nicht benötigte Daten enthalten in der Zeile 6 und 7 sind die Daten von belang welche in einem Dictionary zusammen geführt werden. mit diesem Dictionary soll dann die Datenbank befüllt werden. Es geht darum das Einzelne Tabellen erstellt werden sollen, aus den unterschiedlichen werten.

Aus den zwei Zeilen wird soll dann ein Dictionary enstehen.
[codebox=text file=Unbenannt.txt]
row[6]
Fehler;Zeitverschiebung (UTC) (minuten);Ortszeitstempel;Wirkenergie (kWh);Strommittelwert L1;Strommittelwert L2;Strommittelwert L3;Schaltkreis 1 Wirkenergie (kWh);Schaltkreis 1 (A);Schaltkreis 2 Wirkenergie (kWh);Schaltkreis 2 Strommittelwert (A);Schaltkreis 3 Wirkenergie (kWh);Schaltkreis 3 Strommittelwert (A);Schaltkreis 4 Wirkenergie (kWh);Schaltkreis 4 Strommittelwert (A);Schaltkreis 5 Wirkenergie (kWh);Schaltkreis 5 Strommittelwert (A);Schaltkreis 6 Wirkenergie (kWh);Schaltkreis 6 Strommittelwert (A);Schaltkreis 7 Wirkenergie (kWh);Schaltkreis 7 Strommittelwert (A);Schaltkreis 8 Wirkenergie (kWh);Schaltkreis 8 Strommittelwert (A);Schaltkreis 9 Wirkenergie (kWh);Schaltkreis 9 Strommittelwert (A);Schaltkreis 10 Wirkenergie (kWh);Schaltkreis 10 Strommittelwert (A);Schaltkreis 11 Wirkenergie (kWh);Schaltkreis 11 Strommittelwert (A);Schaltkreis 12 Wirkenergie (kWh);Schaltkreis 12 Strommittelwert (A);Schaltkreis 13 Wirkenergie (kWh);Schaltkreis 13 Strommittelwert (A);Schaltkreis 14 Wirkenergie (kWh);Schaltkreis 14 Strommittelwert (A);Schaltkreis 15 Wirkenergie (kWh);Schaltkreis 15 Strommittelwert (A);Schaltkreis 16 Wirkenergie (kWh);Schaltkreis 16 Strommittelwert (A);Schaltkreis 17 Wirkenergie (kWh);Schaltkreis 17 Strommittelwert (A);Schaltkreis 18 Wirkenergie (kWh);Schaltkreis 18 Strommittelwert (A);Schaltkreis 19 Wirkenergie (kWh);Schaltkreis 19 Strommittelwert (A);Schaltkreis 20 Wirkenergie (kWh);Schaltkreis 20 Strommittelwert (A);Schaltkreis 21 Wirkenergie (kWh);Schaltkreis 21 Strommittelwert (A);Schaltkreis 22 Wirkenergie (kWh);Schaltkreis 22 Strommittelwert (A);Schaltkreis 23 Wirkenergie (kWh);Schaltkreis 23 Strommittelwert (A);Schaltkreis 24 Wirkenergie (kWh);Schaltkreis 24 Strommittelwert (A);Schaltkreis 25 Wirkenergie (kWh);Schaltkreis 25 Strommittelwert (A);Schaltkreis 26 Wirkenergie (kWh);Schaltkreis 26 Strommittelwert (A);Schaltkreis 27 Wirkenergie (kWh);Schaltkreis 27 Strommittelwert (A);Schaltkreis 28 Wirkenergie (kWh);Schaltkreis 28 Strommittelwert (A);Schaltkreis 29 Wirkenergie (kWh);Schaltkreis 29 Strommittelwert (A);Schaltkreis 30 Wirkenergie (kWh);Schaltkreis 30 Strommittelwert (A);Schaltkreis 31 Wirkenergie (kWh);Schaltkreis 31 Strommittelwert (A);Schaltkreis 32 Wirkenergie (kWh);Schaltkreis 32 Strommittelwert (A);Schaltkreis 33 Wirkenergie (kWh);Schaltkreis 33 Strommittelwert (A);Schaltkreis 34 Wirkenergie (kWh);Schaltkreis 34 Strommittelwert (A);Schaltkreis 35 Wirkenergie (kWh);Schaltkreis 35 Strommittelwert (A);Schaltkreis 36 Wirkenergie (kWh);Schaltkreis 36 Strommittelwert (A);Schaltkreis 37 Wirkenergie (kWh);Schaltkreis 37 Strommittelwert (A);Schaltkreis 38 Wirkenergie (kWh);Schaltkreis 38 Strommittelwert (A);Schaltkreis 39 Wirkenergie (kWh);Schaltkreis 39 Strommittelwert (A);Schaltkreis 40 Wirkenergie (kWh);Schaltkreis 40 Strommittelwert (A);Schaltkreis 41 Wirkenergie (kWh);Schaltkreis 41 Strommittelwert (A);Schaltkreis 42 Wirkenergie (kWh);Schaltkreis 42 Strommittelwert (A)

row[7]
25;0;2018-01-04 10:05:00;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
[/code]

Code: Alles auswählen

from glob import glob
from pprint import pprint as p
from os import remove, access
import sys
import time
import csv
import matplotlib.pyplot as plt
import locale
import sqlite3
import json
PathString = "F:\\WVS\\Projekt\\wer\\egx300\\"

newpath = "E:\\back_up\\PycharmProjects\\OS_DIR_Sort\\egx300"


def creat_Device1_list(path=newpath+"\\Device 1_1*"):

    '''Aus einem Ordner wird eine Liste der enthaltenen Datein erzeugt, hier als Default direkt mit einem Filter für Device 1_1 '''

    clear_device_list = []
    for filename in glob(path):
        clear_device_list.append(filename)
    return clear_device_list


def value_select1(datei_value=creat_Device1_list(), get_value=""):

    diclist = []
    for i in datei_value:
        liste = []
        with open(i) as f:
            reader = csv.reader(f, delimiter=';')
            for row in reader:
                liste.append(row)
            dictionary = dict(zip(liste[6], liste[7]))
            diclist.append(dictionary)
            print(diclist)
    for x in diclist:
        x = dictionary.get(get_value)
        #get_value1 =

    return x


def create_table_for(name_tabelle, Datum, value1, value2):
    path = ""
    path_to_the_db_file = "E:\\back_up\\PycharmProjects\\OS_DIR_Sort\\Device1.dat"
    conn = sqlite3.connect(path_to_the_db_file)
    c = conn.cursor()

    sql_string = '''CREATE TABLE IF NOT EXIST 
    {0}(
    id {1} text, 
    {2} real, 
    {3} real
    PRIMARY KEY({0})); 
    '''.format(name_tabelle, Datum, value1, value2)

    c.execute(sql_string)
    conn.commit()
    result = c.fetchall()
    c.close()
    conn.close()
    return result

def insert_in_db(Table,Primary_key, value1, value2):
    path = ""
    path_to_the_db_file = "E:\\back_up\\PycharmProjects\\OS_DIR_Sort\\Device1.dat"
    conn = sqlite3.connect(path_to_the_db_file)
    c = conn.cursor()

    sql_string = '''INSERT INTO IF NOT EXIST 
        {0}(
        id {1} text, 
        {2} real, 
        {3} real
        PRIMARY KEY({0})); 
        '''.format(Table, Primary_key, value1, value2)

    c.execute(sql_string)
    conn.commit()
    result = c.fetchall()
    c.close()
    conn.close()
    return result


def remove_other_CSV(Not_remove=creat_Device1_list()):
    '''Es wird eine Liste erzeugt die die zu Löschenden Dateien beinhaltet und löscht diese gleich. '''

    #Not_remove  = creat_Device1_list()
    dirty_list = []
    for i in glob("E:\\Projekt\\wer\\egx300\\*"):
        dirty_list.append(i)
    for x in Not_remove:
        dirty_list.remove(x)
    try:
        for i in dirty_list:
            remove(i)
    except FileNotFoundError:
        return
    return


while True:
    print(value_select1(get_value='Schaltkreis 1 Strommittelwert (A)'))






Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@telegraph: Du benutzt default-Parameter falsch. Die werden bei Funktionsdefinition ausgewertet, danach nicht wieder. Bei `creat_Device1_list` fehlt ein `e`, die 1 hat im Funktionsnamen nichts verloren. Warum heißt die Variable `clear_device_list`? Was wird da gesäubert? Pfade setzt man mit os.path.join zusammen. Tabellennamen und Spaltennamen sind nichts, was man variabel halten sollte. `create_table_for` und `insert_in_db` setzen irgendwie SQL-Statements zusammen. Schreibe SQL-Statements für konkrete Tabellen mit konkreten Spaltennamen. `path_to_the_db_file` sollte auch eine Konstante sein, die am Anfang des Programms gesetzt wird. Konstanten schreibt man KOMPLETT_GROSS. Eine eben erzeugte Tabelle ist leer, das `fetch_all` in `create_table_for` macht keinen Sinn. Bei einem INSERT erwarte ich auch nicht, dass ich als Rückgabewert alle Einträge der Tabelle bekomme. `remove_other_CSV` bricht ab, sobald eine Datei nicht gefunden wurde? Beim Löschen wäre ich vorsichtiger.

Wie sieht denn Dein aktuelles Datenbankdesign aus?
telegraph
User
Beiträge: 31
Registriert: Mittwoch 6. November 2013, 10:59

Aktuell habe ich noch keine DB die sollte aus den werten zusammen gesetzt werden, L1 L2 L3, und dann für jeden Schaltkreis eine Tabelle da dann alle 5 Minuten eine neue CSV Datei kommt dessen werte dann in die DB eingetragen werten soll.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@telegraph: es sollte nur eine Tabelle geben, statt eine für jeden Schaltkreis. Denn Variablen sollte man nicht in den Tabellennamen packen. Die Felder wären dann (ID, Datum Schaltkreisnummer, Energie, Strom). Auf diese Weise kann man dann einfach Statistiken über alle Schaltkreise bilden.
Antworten