Tabelle erstellen, variable Zeilenanzahl

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
begin3er
User
Beiträge: 10
Registriert: Mittwoch 28. Oktober 2020, 15:49

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)

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

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})
begin3er
User
Beiträge: 10
Registriert: Mittwoch 28. Oktober 2020, 15:49

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
Sirius3
User
Beiträge: 18273
Registriert: Sonntag 21. Oktober 2012, 17:20

Pandas hat auch einen direkten sql-Import.
begin3er
User
Beiträge: 10
Registriert: Mittwoch 28. Oktober 2020, 15:49

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?
Sirius3
User
Beiträge: 18273
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum nicht? Hast Du es ausprobiert?
begin3er
User
Beiträge: 10
Registriert: Mittwoch 28. Oktober 2020, 15:49

noch nicht, habe ja vorhin erst davon erfahren :)
bin auch ehr python neuling, werde es mir mal anschauen
begin3er
User
Beiträge: 10
Registriert: Mittwoch 28. Oktober 2020, 15:49

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)
begin3er
User
Beiträge: 10
Registriert: Mittwoch 28. Oktober 2020, 15:49

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)
Antworten