sqlite neue Tabelle in Datenbank erzeugen

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Das ist doch gar nicht so schwer! Das Umwandeln von Datenstrukturen der Form A in Form B kommt oft vor!

Ich erkläre Dir jetzt mal das Vorgehen *ohne* Code. Das musst Du schon selber umsetzen ;-)

Du schaust Dir erst einmal die *erste* Zeile an. Dann merkst Du, dass darin eine Liste Spaltennamen enthalten ist. Diese Zeile musst Du Dir separat merken, weil Du ja später immer einen Zahlenwert auf ein Jahr abbilden musst. Und die Info, welche Jahre es gibt, steht eben nur in der ersten Zeile.
- merke Dir die Jahre in einer neuen Liste

Danach schaust Du Dir erst einmal *eine* weitere Zeile an. In dieser steht in 0. Position das Land. Dies ist immer fix. Danach stehen für jedes Jahr eben die Werte drin. D.h. Index 1 der Datenzeile entspricht dem 0. Index Deiner Jahresliste, Index 2 der Datenzeile dem 1. Index der Jahresliste usw. Du musst also alle Jahre durchgehen und Dir aus der Jahresliste das *zugehörige* Jahr holen.

Algorithisch für *eben diese eine* Zeile könntest Du nun so vorgehen:
- Lege ein Funktion an, die als Argument eine Zeile mit Daten und die Jahresliste entgegen nimmt.
- Lege eine leere Ergebnis-Liste an
- Gehe die Zeile ab Position *1* bis zum Ende durch (``for``-Schleife ab Index 1 -> wurde Dir schon gezeigt). Nutze dafür ``enumerate``, um Dir zusätzlich zur Quote einen Index zu erzeugen.
- Füege dieser Ergebnis-Liste jeweils eine Liste hinzu, die folgendermaßen aufgebaut ist:
-- 0.-Eintrag der Zeile (eben das Land; ist für jeden Durchlauf der Schleife identisch)
-- Das Jahr aus der Jahresliste mit dem generierten Index der for-Schleife
-- Die Quote
- Gebe die Ergebnisliste zurück. Diese hat also als Werte Listen mit jeweils drei Einträgen!

Nun könntest Du das für eine Zeile (die Du einfach mal zum Testen *manuell* in die Funktion reingibst) testen.

Anschließend musst Du ja nur noch eine Schleife über *alle* Zeilen (außer natürlich der Kopfzeile, die man zunächst separat behandeln muss) schreiben, die diese Funktion aufruft und das Ergebnis an eine Ergebnisliste anhängt. (nutze ```+`` oder ``extend`` auf einer Liste)

So... ist das so schwer vom Prinzip?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Padidem hat geschrieben:ok... aber wie soll ich das jetzt in meine generierte Tabelle armutsgefahr mit den 3 Spalten 'Land' 'Jahr', 'Quote' übertragen??
So, dass möglichst keine Daten verloren gehen. Die csv-Tabelle ist 2-dimensional - Du fragst jetzt nicht ernsthaft, wie die Daten eindimensional darstellbar sind, oder?
Padidem
User
Beiträge: 63
Registriert: Donnerstag 8. Januar 2015, 14:52

@ Hyperion: kannst du mir nicht doch den Code dazu geben?
Ich verstehe zwar deine Anweisungen und sie klingen auch schlüssig aber ich kann sie irgendwie nicht umsetzen (glaube ich bin zu doof :roll: )
Würde deinen Code innerhalb meiner Ausarbeitung natürlich zitieren.


Du würdest mir sehr damit helfen
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Sorry, aber dafür ist mir meine Freizeit zu schade... ich habe schlicht keine Lust dazu, denn es ist (für mich) nicht fordernd und interessant.

Aber mal ehrlich: *Woran* scheiterst Du denn dabei? Eigentlich habe ich das doch recht kleinschrittig aufgeschrieben. Man muss ja mehr oder minder nur ein wenig mit ``for``-Schleifen, ein wenig Slicing und Zuweisungen an Listen (append und extend) arbeiten. Auch für einen Anfänger sehe ich da jetzt nicht so das Problem! :K

Du musst das wirklich *Schritt für Schritt* versuchen umzusetzen! Am besten vollziehst Du das erst einmal *ohne* Python einfach mit einer gegebenen Tabelle der Query und dann einem Zettel und Stift auf Karopapier nach. Schreibe Dir halt für jeden Durchlauf alle Werte auf. Ich denke dann siehst Du doch anschaulich, wie das algorithmisch läuft.

Danach musst Du einfach jeden *kleinen* Schritt in Python kodieren. Also z.B. eine Zuweisung hinschreiben, oder eine ``for``-Schleife usw. Da können ja keine *großen* Probleme auftreten!

Mich würde ja nach wie vor brennend interessiern, in welchem *Kontext* Du das erledigen musst. Ich hoffe mal nicht als irgend ein $Informatiker‽

Kopf hoch, das kannst Du bestimmt! Du musst Dir nur die Zeit nehmen, Dinge im Tutorial aufzuarbeiten! Insbesondere das Arbeiten mit Listen und Schleifen scheinst Du noch nicht verinnerlicht zu haben...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Padidem
User
Beiträge: 63
Registriert: Donnerstag 8. Januar 2015, 14:52

also habe das jetzt mal so angefangen und mir die Jahre in einer Liste gemerkt:

Code: Alles auswählen

reader = csv.reader(open("armutsgefahr.txt", "rb"), delimiter="\t")

Read = [row for row in reader]

Jahr= Read[0][1:10]

Jahr
Out[103]: ['2005', '2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013']
Antworten