From ce2889991a8e3228ba701d6910afd02073a35a97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hauke=20Z=C3=BChl?= Date: Wed, 23 Jun 2021 16:17:11 +0200 Subject: [PATCH] Einlesesen der CSV-Datei mit Modul CSV --- python/muell.py | 98 +++++++++++++++++++++++++++---------------------- 1 file changed, 54 insertions(+), 44 deletions(-) diff --git a/python/muell.py b/python/muell.py index d550375..f227ff5 100644 --- a/python/muell.py +++ b/python/muell.py @@ -10,13 +10,14 @@ Um die Daten an Telegram zu senden, musst du dir ein Skript/Programm schreiben, von Telegram verwendet und Daten an dich oder deine Gruppe senden kann! Beispiel für eine Konfigurationsdatei: -tgReceiver: +tgReceiver: kommune: 2601 strasse: 2146 pathBot: '~/bin/YMBot' tgBotOwner: ''' +import csv import re import requests import httplib2 @@ -28,7 +29,7 @@ from pathlib import Path # Funktionen def get_index_positions(list_of_elems, element): - ''' Returns the indexes of all occurrences of give element in + ''' Returns the indexes of all occurrences of given element in the list- listOfElements ''' index_pos_list = [] for i in range(len(list_of_elems)): @@ -53,7 +54,7 @@ def init(key, modus, host, headers): url = f'https://{host}/?key={key}&modus={modus}&waction=init' http = httplib2.Http() (resp, content) = http.request(url, "POST", headers = headers, body = urllib.parse.urlencode(postdata)) - # print(content) + result = re.findall(r"", str(content)) datum = result[1].split(' ') @@ -74,12 +75,20 @@ def read_file(jahr): antwort_liste = None try: - f = open(f'muell{jahr}.csv', 'rb') - antwort = str(f.read()) - antwort_liste = antwort[antwort.find('Biom'):].strip("'").replace('\\n', '\n').split('\n') + with open(f'muell{jahr}.csv', 'r', encoding="latin1") as f: + csv_reader = csv.reader(f, delimiter=';') + lines = 0 + antwort_liste = [] + for row in csv_reader: + if lines == 0: + # print(f'Column names are {", ".join(row)}') + lines += 1 + else: + if isinstance(row, list): + antwort_liste.extend(row) except FileNotFoundError: pass - + return antwort_liste # Variablen @@ -119,40 +128,41 @@ muell_arten = [ 'Schadstoffmobil', ] -# __main__ -antwort_liste = read_file(current_year) -if antwort_liste == None: - # Keine vernünftigen Daten, ergo mal gucken, was die Webseite ergibt - config = readConfig() - postdata['f_id_kommune'] = config['kommune'] - postdata['f_id_strasse'] = config['strasse'] - - (name, value) = init(key, modus, host, headers) - if name != None and value != None: - postdata[name] = value - - http = httplib2.Http() - (resp, content) = http.request(url, "POST", headers = headers, body = urllib.parse.urlencode(postdata)) - - antwort = str(content) - f = open(f'muell{current_year}.csv', 'wb') - f.write(content) - f.close() - antwort_liste = antwort[antwort.find('Biom'):].strip("'").replace('\\n', '\n').split('\n') - -daten = set(antwort_liste) - -for datum in daten: - tomorrow = (datetime.now() + timedelta(1)).strftime('%d.%m.%Y') - datum = datum.split(';') - l_muell = get_index_positions(datum, tomorrow) - if len(l_muell) > 0: - wird = 'wird' if len(l_muell) < 2 else 'werden' - tonnen = [] - for i in l_muell: - tonnen.append(muell_arten[i]) - - if len(tonnen) > 0: - tonnen = ' und '.join(tonnen) - print(f'Morgen {wird} {tonnen} abgeholt') - break +if __name__ == '__main__': + antwort_liste = read_file(current_year) + + if antwort_liste == None: + # Keine vernünftigen Daten, ergo mal gucken, was die Webseite ergibt + config = readConfig() + postdata['f_id_kommune'] = config['kommune'] + postdata['f_id_strasse'] = config['strasse'] + + (name, value) = init(key, modus, host, headers) + if name != None and value != None: + postdata[name] = value + + http = httplib2.Http() + (resp, content) = http.request(url, "POST", headers = headers, body = urllib.parse.urlencode(postdata)) + + antwort = str(content) + f = open(f'muell{current_year}.csv', 'wb') + f.write(content) + f.close() + antwort_liste = read_file(current_year) + + daten = set(antwort_liste) + # TODO: Leider weiss ich ab hier nur, dass Müll abgeholt wird, leider nicht, welcher :-/ + tomorrow = (datetime.now() + timedelta(1)).strftime('%d.%m.%Y') + for datum in daten: + datum = datum.split(';') + l_muell = get_index_positions(datum, tomorrow) + if len(l_muell) > 0: + wird = 'wird' if len(l_muell) < 2 else 'werden' + tonnen = [] + for i in l_muell: + tonnen.append(muell_arten[i]) + + if len(tonnen) > 0: + tonnen = ' und '.join(tonnen) + print(f'Morgen {wird} {tonnen} abgeholt') + break