Variable auslesen und aufsplitten

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
fishtown
User
Beiträge: 9
Registriert: Dienstag 12. März 2013, 18:05

Moin,
ich versuche mich gerade in der Programmierung mit Python und bin bis jetzt begeistert.

Aber, wie sollte es auch anders sein, stehe ich vor meinem ersten Problem. Ich habe eine Variable, die mit mehreren Werten gefüllt ist, alle getrennt voneinander mit einem Komma. Nun möchte ich die auslesen, und jeden einzelnen Wert dazu verwenden um in einer Tabelle Spalten anzulegen.

Also:
variable = "wert1, wert2, wert3,..."

Wie kann ich das am besten umsetzten, damit ich als Ergebnis eine Tabelle mit den Spalten "wert1", "wert2", ... habe?

Danke für die Hilfe.
BlackJack

@fishtown: Schau Dir mal die Methoden auf Zeichenketten an, da gibt es eine zum Aufteilen in eine Liste. Die sollte eigentlich in fast jeden Grundlagentutorial vorkommen.

Was meinst Du mit Tabelle? Einen Datentyp der so heisst, gibt es nicht. Möchtest Du vielleicht eine verschachtelte Liste anlegen, also eine Liste die weitere Listen enthält die jeweils alle Werte einer Tabellenzeile enthalten?
fishtown
User
Beiträge: 9
Registriert: Dienstag 12. März 2013, 18:05

Danke für die schnelle Antwort.

Ich meine mit Tabelle eine Datenbanktabelle. Sorry, hätte ich besser beschreiben müssen.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Am besten verrätst du uns, wo die Daten herkommen. Liest du sie aus einer Datei ein (und wie sieht das Format aus) oder werden die Daten irgendwie anders eingegeben? Was sind das für Daten? Was willst du mit den Daten machen? Warum soll das ganze in eine Datenbank? Und was für eine Datenbank benutzt du?

Mit den Informationen kann man dir sicher besser helfen.
Das Leben ist wie ein Tennisball.
fishtown
User
Beiträge: 9
Registriert: Dienstag 12. März 2013, 18:05

Die Daten kommen als Variable (Keyword) aus einem Programm, das Python als Sprache integriert hat. In diesem 'Keyword' sind verschiedene Werte, jeweils durch ein Komma getrennt, hinterlegt. Genau diese Werte (Anzahl kann schwanken, je nach Nutzung des Programms) benötige ich als Spaltenbenennung für eine sqlite3 oder mysql Datenbank.

Ich will also die Werte des Keywords auslesen, diese vereinzeln, und dann mit 'CREATE Table Datenbankname (Wert1, Wert2,...)' eine Tabelle anlegen.

Warum Datenbank? Weil es die effizienteste Methode ist, um diese Daten zu verarbeiten (Suche, Sortierung, Mehrbenutzerzugriff,...)
BlackJack

@fishtown: Nur falls die Antwort untergegangen ist: Das Python-Tutorial durcharbeiten und bei Zeichenketten dort auch dem Link zur Referenz folgen wo die Methoden auf Zeichenketten gelistet sind.
fishtown
User
Beiträge: 9
Registriert: Dienstag 12. März 2013, 18:05

Thx BlackJack. Bin gerade beim Kapitel split und list. Denke, ich komme der sache näher.

Ok, denke ich hab nen Weg gefunden (zumindest den Ansatz):

1. Zählen der Wörten im Keyword mit i = len(keyword)
2. dann 'irgendwie' mit for ... keyword ein CREATE TABLE DBName (...) ausführen. Wie gesagt, irgendwie.

Bin ich damit auf dem richtigen Weg?
BlackJack

@fishtown: Fast. Lass das `i` weg. Man kann in Python mit ``for`` direkt über die Elemente von Listen (und Sequenztypen allgemein) iterieren. Den Umweg über einen Index braucht man da nicht. Und eine Liste, beziehungsweise allgemein ein iterierbares Objekt mit Zeichenketten kann man mit der `join()`-Methode auf Zeichenketten zusammen setzen. Wiederholtes ``+`` oder ``+=`` in einer Schleife sollte man vermeiden.
fishtown
User
Beiträge: 9
Registriert: Dienstag 12. März 2013, 18:05

Also, das habe ich nun (gefunden hier im Forum und etwas verändert):

Das original:

Code: Alles auswählen

def create_table(name, *columns):
    return "create table %s (%s)" % (name, ", ".join(columns))
Meine Version:

Code: Alles auswählen

def create_table(*columns):
    return "create table dbtest (%s)" % (", ".join(columns))

keywords = ("user_1", "user_2", "user_3", "user_4")
print (create_table(keywords))
Ich habe 'name' weggelassen, da ich diesen fest vergebe.

Funktioniert natürlich nicht....
return "create table dbtest (%s)" % (", ".join(columns))
TypeError: sequence item 0: expected str instance, tuple found
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Das Problem ist nicht die Funktion, sondern wie du sie aufrufst. Lass dir mal `columns` in der Funktion ausgeben und lies im Tutorial nach, was es mit `*args` auf sich hat.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Wenn du keywords ohnehin als Tupel definiert hast dann brauchst du den Sternchen-Operator in der Funktionsdefinition nicht.

Einfach noch mal etwas Code:

Code: Alles auswählen

>>> def function(*args, **kwargs):
    print(args)
    print(kwargs)

>>> function('foo', a='bar', b='baz')
('foo',)
{'a': 'bar', 'b': 'baz'}
fishtown
User
Beiträge: 9
Registriert: Dienstag 12. März 2013, 18:05

Super, danke. Stimmt. Dieser Stern...

Ich danke euch für die Hinweise auf dem weg zum 'Erfolg'. Genauso soll es sein. Vielen Dank.
Antworten