mehrzeilige Tabellen in Python?

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Aquerias
User
Beiträge: 28
Registriert: Freitag 28. September 2007, 10:33

Donnerstag 18. Oktober 2007, 09:59

Hallo Leute,

ich habe da mal wieder ein Problem. Ich habe über Google leider nichts herausgefunden und hoffe daher auf Eure Hilfe.

Meine Frage: Kann ich mit Python eine mehrzeilige Tabelle wie in Access erstellen?


Ausgangssituation: Ich habe eine Datenbank in der gibt es eine Tabelle bzw. Spalte mit Werten von A-Z. Diese Werte kommen öfters in der Spalte vor. Ich greife mit Python auf diese Spalte zu und zähle mit count die Anzahl der Buchstaben in der Spalte.

Ziel: Diese ermittelten Werte würde ich jetzt gerne in eine Tabelle oder Liste schreiben (in Python oder Access), falls das geht. Das ganze sollte dann folgendermaßen aussehen:

Code: Alles auswählen

A   3
B   6
C   20
...

Gruß

Aquerias
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Donnerstag 18. Oktober 2007, 10:10

Eine Tabelle erhältst du, wenn du eine zweidimensionale Liste verwendest:

Code: Alles auswählen

table = [
    [1, 2, 3],
    [4, 5, 6]
    ]
Aquerias
User
Beiträge: 28
Registriert: Freitag 28. September 2007, 10:33

Donnerstag 18. Oktober 2007, 10:50

Hallo YOGi,

danke für die Antwort.
Sorry habe Deinen Code ausprobiert. Bekomme bei print table aber trotzdem
nur eine Liste in der alle Werte hintereinander stehen.

Ich wollte das ganze gerne mit einer Schleife lösen.

z.B

1. Anzahl von A feststellen.
2. A in Zeile1/Spalte1 und Anzahl von A in Zeile1/Spalte2 der Tabelle eintragen.
3. Index der Tabelle um eins erhöhen.
4. Anzahl von B feststellen.
5. B in Zeile2/Spalte1 und Anzahl von B in Zeile2/Spalte2 der Tabelle eintragen.
6. Index der Tabelle um eins erhöhen.
usw.

Gruß

Aquerias
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 18. Oktober 2007, 10:59

Hallo Aquerias!

Falls du es in einem GUI ausgeben möchtest. Z.B. mit wxPython:

Bild

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

import wx
import wx.grid

wx.SetDefaultPyEncoding("iso-8859-15")


class MyFrame(wx.Frame):
    
    def __init__(
        self, parent = None, title = "Example", size = wx.Size(550, 420),
        spaltennamen = None, datenzeilen = None
    ):
        wx.Frame.__init__(self, parent, -1, title, size = size)
        
        panel = wx.Panel(self)
        
        vbox_main = wx.BoxSizer(wx.VERTICAL)
        panel.SetSizer(vbox_main)
        
        grid = wx.grid.Grid(panel)
        vbox_main.Add(grid, 1, wx.EXPAND | wx.ALL, 5)
        
        grid.CreateGrid(len(datenzeilen), len(spaltennamen))
        grid.SetColLabelSize(20)
        grid.SetRowLabelSize(25)
        for index, label in enumerate(spaltennamen):
            grid.SetColLabelValue(index, label)
        for row, zeilendaten in enumerate(datenzeilen):
            for col, value in enumerate(zeilendaten):
                grid.SetCellValue(row, col, value)
                grid.SetReadOnly(row, col)


def main():
    """Testing"""
    app = wx.PySimpleApp()
    
    spaltennamen = (u"Vorname", u"Nachname", u"Ort")
    datenzeilen = (
        (u"Max", u"Mustermann", u"Bremen"),
        (u"Moriz", u"Mustermann", u"Hausen"),
        (u"Maria", u"Wurstlbrumpft", u"München"),
        (u"Marion", u"Hupfer", u"Telfs"),
        (u"Dani", u"Ella", u"Oberhofen"),
    ) * 20
    
    f = MyFrame(spaltennamen = spaltennamen, datenzeilen = datenzeilen)
    f.Center()
    f.Show()
    app.MainLoop()


if __name__ == "__main__":
    main()
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Aquerias
User
Beiträge: 28
Registriert: Freitag 28. September 2007, 10:33

Donnerstag 18. Oktober 2007, 11:13

Hallo gerold,

vielen Dank. Eigentlich möchte ich das ganze nicht als GUI ausgeben.

Ich bin in Python noch ein blutiger Anfänger und Suche nach einer einfachen Möglichkeit Werte aus einer Tabelle mittels Python abzurufen und in eine zweite identische Tabelle einer anderen Datenbank einzutragen. Praktisch eine Aktualisierung einer Tabelle mittels Python.
Die mehrzeilige Tabelle mit der Anzahl der einzelnen Variablen ist nur ein zwischen schritt.

Gruß

Aquerias
BlackJack

Donnerstag 18. Oktober 2007, 14:21

Wenn es Dir um die *Datenstruktur* und nicht um eine *Anzeige* geht, dann verstehe ich nicht was Du an Y0Gi's Vorschlag mit der verschachtelten Liste auszusetzen hast. Vor allem kannst Du eine Struktur in dieser Richtung mit einer SQL-Abfrage mit ``GROUPBY`` und ``COUNT(*)`` direkt von der Datenbank mit `fetchall()` bekommen.

Andererseits sind andere Strukturen vielleicht günstiger für das was Du mit den Daten dann machen möchtest. Zum Beispiel ein Dictionary, das die Buchstaben auf die Anzahlen abbildet.
Antworten