Seite 1 von 1

String in Liste umwandeln?

Verfasst: Mittwoch 16. Februar 2005, 09:17
von Psus82
Moin moin,

ich möchte einen String der so aussieht:

Code: Alles auswählen

'EinsZwei'
In eine Liste Umwandeln die so aussehen soll:

Code: Alles auswählen

['Eins', 'Zwei']
geht das :?:

Psus82

Verfasst: Mittwoch 16. Februar 2005, 09:38
von jens
Das ist schwierig, wenn kein konkretes Trennzeichen vorhanden ist... In welchen Varianten kommt es denn vor? Haben die zu trennenden Wörter immer einen Großbuchstaben???
Irgendwelche Anhaltspunkte muß man ja haben, damit eine Automatische Trennung funktionieren kann...

Ne keine Anhaltspunkte.

Verfasst: Mittwoch 16. Februar 2005, 09:46
von Psus82
Ne es gibt keine Anhaltspunkte. :(
Es handelt sich um einen String indem Dateinamen und die jeweilige letzte Änderungszeit der Datei sind.
Gibt es denn ne Möglichkeit eine Liste in eine Textdatei zu schreiben ohne sie Vorher in einen String zu verwandeln?
Außerdem bräuchte ich dann noch ne Möglichkeit diese Liste wieder auszulesen.
Sie müsste aber dann auch Liste als Variablentyp nach dem auslesen sein.
Dann müsste ich den String nicht in eine Liste umwandeln.

Psus82

Verfasst: Mittwoch 16. Februar 2005, 10:06
von jens
Dafür gibt es "Python object serialization", damit kann man jedes Python-Objekt in einen String packen, diesen in eine Datei speichern. Das gleiche geht natürlich dannach auch wieder rückwärts. Such mal im Forum nach "pickle"...

Das dumme dabei ist, das die Textdatei nicht gerade für änderungen per Hand optimal ist...

Von daher kann man evtl. auch ganz einfach mit split() und join() Arbeiten... Oder vielleicht mit Dookie's PyXO http://www.boa3d.de/python/modules/PyXO.php eine XML Datei schreiben lassen...

Ich habe glaube ich ne Lösung.

Verfasst: Mittwoch 16. Februar 2005, 10:40
von Psus82
Ich habe glaube ich ne Lösung,

aber ich weiß nicht ob und wie das funktionieren kann.
Sagen wir ich habe einen Tupel der so aussieht:

Code: Alles auswählen

["ABC",123]
Jetzt will ich das nach jedem Element ein / eigestzt wird:

Code: Alles auswählen

["ABC","/",123,"/"]
Dann wandle ich den Tupel in einen String um der glaube ich dann so aussieht:

Code: Alles auswählen

"ABC/123/"
Nunn trenne ich mit split bei jedem /:

Code: Alles auswählen

(ABC,123)
Würde das funktionieren?
Wenn ja wie muss der Code dazu aussehen?

Psus82

Stop alles zurück.

Verfasst: Mittwoch 16. Februar 2005, 10:47
von Psus82
Geht wohl doch nicht da man tupel nicht verändern kann.

Verfasst: Mittwoch 16. Februar 2005, 10:48
von pr0stAta
also erstmal ist

Code: Alles auswählen

["ABC",123]
eine Liste und kein Tupel.
Und wozu willst du nach jedem eintrag in der liste
etwas einfügen um es später zu trennen um auf jedes
einzelne zuzugreifen?
mach doch einfach:

Code: Alles auswählen

for item in Liste:
  print item
anstatt print item kannste natürlich da, jeden eintrag in
eine datei schreiben und diese später zeilenweise auslesen.
die ausgelesenen werte kannst du dann ja ganz einfach wieder
in eine liste schreiben. hoffe das ich nichts falsch verstanden habe ^^

Verfasst: Mittwoch 16. Februar 2005, 10:50
von jens

Code: Alles auswählen

Liste = ["ABC",123]
print Liste
StringListe = [str(i) for i in Liste] # Alle Elemente in Strings wandeln
StringListe = "/".join(StringListe)
print StringListe
Liste = StringListe.split("/")
print Liste
Ausgabe:
['ABC', 123]
ABC/123
['ABC', '123']
Das Problem dabei ist die Zahl 123... Denn mit join kann man nur String Elemente verbinden... Deswegen hab ich alle Elemente in Strings gewandelt

Vielleicht Arbeitest du besser mit pickle, damit ist der Aufbau (String, Int usw.) egal:

Code: Alles auswählen

import pickle

Liste = ["ABC",123]
print Liste

pickledString = pickle.dumps(Liste)
print "-"*30
print pickledString
print "-"*30

# und zurück
Liste = pickle.loads(pickledString)
print Liste
Ausgaben:
['ABC', 123]
------------------------------
(lp0
S'ABC'
p1
aI123
a.
------------------------------
['ABC', 123]
Mit pickle kann man auch direkt in eine Datei schreiben und lesen. Schau mal hier:
http://www.python.org/dev/doc/devel/lib ... ickle.html

Habe mich im Quellcode vertan.

Verfasst: Mittwoch 16. Februar 2005, 11:03
von Psus82
natürlich muss es

Code: Alles auswählen

[("ABC",123),("DEF",456)]
heißen.
Nur wie kriege ich den einen Tupel in eine Textdatei geschrieben wo zwischen jedem Elemnt eine freie Zeile ist.
Und wie kriege ich das später zurückgelesen.

Psus82

Verfasst: Mittwoch 16. Februar 2005, 11:06
von jens
Na, das ist ja das schöne an pickle... Die Datenstruktur ist egal! Somit klappt es auch bei dem Aufbau:

Code: Alles auswählen

import pickle

Liste = [("ABC",123),("DEF",456)]
print Liste

pickledString = pickle.dumps(Liste)
print "-"*30
print pickledString
print "-"*30

# und zurück
Liste = pickle.loads(pickledString)
print Liste
Ausgaben:
[('ABC', 123), ('DEF', 456)]
------------------------------
(lp0
(S'ABC'
p1
I123
tp2
a(S'DEF'
p3
I456
tp4
a.
------------------------------
[('ABC', 123), ('DEF', 456)]
Du kannst doch einfach den pickledString in eine Datei schreiben/lesen...

Thanks a lot!!

Verfasst: Mittwoch 16. Februar 2005, 11:12
von Psus82
Danke. :D
Habe deinen Link erst beim zweiten mal gesehen.