Seite 1 von 1

Tabelle erstellen, variable Zeilenanzahl

Verfasst: Mittwoch 28. Oktober 2020, 15:56
von begin3er
Servus zusammen,

ich würde gerne eine Tabelle aus Arrays erstellen und diese dann per Mail versenden. Ich bin noch am Angang, dass heißt die Tabelle wird noch mehr Spalten bekommen. Bisher habe ich die Lösung die unten zu sehen ist.
Leider ist die Zeilen Anzahl nicht immer gleich groß. Kann ich dass hier:

Code: Alles auswählen

    my_dict_3 = dict(zip(Header, zip(Zeile1, Zeile2 , Zeile3)))
irgendwie umändern, sodass ich nicht vorher angeben muss wieviele Zeilen ich habe? wenn ich

Code: Alles auswählen

    data= Zeile1, Zeile2 , Zeile3     
    my_dict_3 = dict(zip(Header, zip(data)))
versuche, wird nur Zeile1 ausgegeben.

Oder gibt es vielleicht eine Möglichkeit die Spalten mit Arrays zu füllen? Also Spalte1 = Aktien_array etc.
Also die Tabelle nach Spalten füllen und nicht nach Zeilen?

Viele Grüße :D

Code: Alles auswählen

from smtplib import SMTP
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import pandas as pd
from pretty_html_table import build_table


def send_mail(body):
    message = MIMEMultipart()
    message['Subject'] = 'xxx'
    message['From'] = 'xxx'
    message['To'] = 'xxx'

    body_content = body
    message.attach(MIMEText(body_content, "html"))
    msg_body = message.as_string()

    server = SMTP('mail.gmx.net', 587)
    server.starttls()
    server.login(message['From'], 'xxx')
    server.sendmail(message['From'], message['To'], msg_body)
    server.quit()


def get_gdp_data():
    Header = ["Aktie", "Kurs", "Trendrichtung"]
    Aktien = ['Google', 'Amazon', 'Netflix', 'Apple', 'AT&T']
    Kurs = ['1234', '4673', '9361', '112', '7601']
    Trendrichtung = ['Short', 'Short', 'Long', 'Long', 'Short']
    Zeile1 = [Aktien[0], Kurs[0], Trendrichtung[0]]
    Zeile2 = [Aktien[1], Kurs[1], Trendrichtung[1]]
    Zeile3 = [Aktien[2], Kurs[2], Trendrichtung[2]]


    my_dict_3 = dict(zip(Header, zip(Zeile1, Zeile2 , Zeile3)))
    data = pd.DataFrame(my_dict_3)
    return data


gdp_data = get_gdp_data()
output = build_table(gdp_data, 'blue_light')
send_mail(output)


Re: Tabelle erstellen, variable Zeilenanzahl

Verfasst: Mittwoch 28. Oktober 2020, 16:30
von Sirius3
Bei my_dict_3 ist das my_-Präfix überflüssig und die 3 hat irgendwie auch keine Bedeutung.
Warum trennst Du erst Aktien, Kurs und Trendrichtung in Zeilen auf, um sie dann gleich wieder in Listen zusammenzufassen?

Code: Alles auswählen

    aktien = ['Google', 'Amazon', 'Netflix', 'Apple', 'AT&T']
    kurs = ['1234', '4673', '9361', '112', '7601']
    trendrichtung = ['Short', 'Short', 'Long', 'Long', 'Short']
    data = pd.DataFrame({'Aktie': aktien, 'Kurs': kurs', 'Trendrichtung': trendrichtung})

Re: Tabelle erstellen, variable Zeilenanzahl

Verfasst: Mittwoch 28. Oktober 2020, 17:28
von begin3er
Die Daten kommen aus eine sql Tabellen. Dort habe ich dann arrays mit Aktien,Preis etc.

das oben ist ersmal eine teyst.py wo ich das ganze ausprobieren möchte

Re: Tabelle erstellen, variable Zeilenanzahl

Verfasst: Mittwoch 28. Oktober 2020, 18:11
von Sirius3
Pandas hat auch einen direkten sql-Import.

Re: Tabelle erstellen, variable Zeilenanzahl

Verfasst: Mittwoch 28. Oktober 2020, 18:31
von begin3er
In erster Linie geht es mir darum eine ähnliche Ausgabe zu bekommen:
Bild
dabei ist die Anzahl der Einträge variable. Wenn ich direkt mit pandas die sql lade ist es möglich eine solche Tabelle zu bekommen?

Re: Tabelle erstellen, variable Zeilenanzahl

Verfasst: Mittwoch 28. Oktober 2020, 18:58
von Sirius3
Warum nicht? Hast Du es ausprobiert?

Re: Tabelle erstellen, variable Zeilenanzahl

Verfasst: Mittwoch 28. Oktober 2020, 19:26
von begin3er
noch nicht, habe ja vorhin erst davon erfahren :)
bin auch ehr python neuling, werde es mir mal anschauen

Re: Tabelle erstellen, variable Zeilenanzahl

Verfasst: Mittwoch 28. Oktober 2020, 21:39
von begin3er
Mein Fehler lag in der zweiten verwendeten zip funktion. Jetzt klappt es so wie ich es haben wollte.
mit pandas kenne ich mich einfach null aus. mal schauen ob ich das direkt mit panda hinbekomme

Code: Alles auswählen

from smtplib import SMTP
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import pandas as pd
from pretty_html_table import build_table


def send_mail(body):
    message = MIMEMultipart()
    message['Subject'] = 'xxx'
    message['From'] = 'xxx'
    message['To'] = 'xxx'

    body_content = body
    message.attach(MIMEText(body_content, "html"))
    msg_body = message.as_string()

    server = SMTP('mail.gmx.net', 587)
    server.starttls()
    server.login(message['From'], 'xxx')
    server.sendmail(message['From'], message['To'], msg_body)
    server.quit()


def get_gdp_data():
    Header = ["Aktie", "Kurs", "Trendrichtung"]
    Aktien = ['Google', 'Amazon', 'Netflix', 'Apple', 'AT&T']
    Kurs = ['1234', '4673', '9361', '112', '7601']
    Trendrichtung = ['Short', 'Short', 'Long', 'Long', 'Short']

    mydict = dict(zip(Header, (Aktien , Kurs , Trendrichtung )))
    data = pd.DataFrame(mydict)
    return data


gdp_data = get_gdp_data()
output = build_table(gdp_data, 'blue_light')
send_mail(output)

Re: Tabelle erstellen, variable Zeilenanzahl

Verfasst: Mittwoch 28. Oktober 2020, 21:39
von begin3er
Mein Fehler lag in der zweiten verwendeten zip funktion. Jetzt klappt es so wie ich es haben wollte.
mit pandas kenne ich mich einfach null aus. mal schauen ob ich das direkt mit panda hinbekomme

Code: Alles auswählen

from smtplib import SMTP
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import pandas as pd
from pretty_html_table import build_table


def send_mail(body):
    message = MIMEMultipart()
    message['Subject'] = 'xxx'
    message['From'] = 'xxx'
    message['To'] = 'xxx'

    body_content = body
    message.attach(MIMEText(body_content, "html"))
    msg_body = message.as_string()

    server = SMTP('mail.gmx.net', 587)
    server.starttls()
    server.login(message['From'], 'xxx')
    server.sendmail(message['From'], message['To'], msg_body)
    server.quit()


def get_gdp_data():
    Header = ["Aktie", "Kurs", "Trendrichtung"]
    Aktien = ['Google', 'Amazon', 'Netflix', 'Apple', 'AT&T']
    Kurs = ['1234', '4673', '9361', '112', '7601']
    Trendrichtung = ['Short', 'Short', 'Long', 'Long', 'Short']

    mydict = dict(zip(Header, (Aktien , Kurs , Trendrichtung )))
    data = pd.DataFrame(mydict)
    return data


gdp_data = get_gdp_data()
output = build_table(gdp_data, 'blue_light')
send_mail(output)