String in Liste umwandeln?

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.
Benutzeravatar
Psus82
User
Beiträge: 128
Registriert: Dienstag 6. April 2004, 16:15

String in Liste umwandeln?

Beitragvon Psus82 » Mittwoch 16. Februar 2005, 09:17

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
Drei Dinge die Programmierer hassen:
1.)Sonnenlicht
2.)Frische Luft
3.)Das ätzende Geräusch zwitschernder Vögel
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 16. Februar 2005, 09:38

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...
Benutzeravatar
Psus82
User
Beiträge: 128
Registriert: Dienstag 6. April 2004, 16:15

Ne keine Anhaltspunkte.

Beitragvon Psus82 » Mittwoch 16. Februar 2005, 09:46

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
Drei Dinge die Programmierer hassen:

1.)Sonnenlicht

2.)Frische Luft

3.)Das ätzende Geräusch zwitschernder Vögel
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 16. Februar 2005, 10:06

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...
Benutzeravatar
Psus82
User
Beiträge: 128
Registriert: Dienstag 6. April 2004, 16:15

Ich habe glaube ich ne Lösung.

Beitragvon Psus82 » Mittwoch 16. Februar 2005, 10:40

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
Drei Dinge die Programmierer hassen:

1.)Sonnenlicht

2.)Frische Luft

3.)Das ätzende Geräusch zwitschernder Vögel
Benutzeravatar
Psus82
User
Beiträge: 128
Registriert: Dienstag 6. April 2004, 16:15

Stop alles zurück.

Beitragvon Psus82 » Mittwoch 16. Februar 2005, 10:47

Geht wohl doch nicht da man tupel nicht verändern kann.
Drei Dinge die Programmierer hassen:

1.)Sonnenlicht

2.)Frische Luft

3.)Das ätzende Geräusch zwitschernder Vögel
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Beitragvon pr0stAta » Mittwoch 16. Februar 2005, 10:48

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 ^^
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 16. Februar 2005, 10:50

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
Benutzeravatar
Psus82
User
Beiträge: 128
Registriert: Dienstag 6. April 2004, 16:15

Habe mich im Quellcode vertan.

Beitragvon Psus82 » Mittwoch 16. Februar 2005, 11:03

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
Drei Dinge die Programmierer hassen:

1.)Sonnenlicht

2.)Frische Luft

3.)Das ätzende Geräusch zwitschernder Vögel
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 16. Februar 2005, 11:06

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...
Benutzeravatar
Psus82
User
Beiträge: 128
Registriert: Dienstag 6. April 2004, 16:15

Thanks a lot!!

Beitragvon Psus82 » Mittwoch 16. Februar 2005, 11:12

Danke. :D
Habe deinen Link erst beim zweiten mal gesehen.
Drei Dinge die Programmierer hassen:

1.)Sonnenlicht

2.)Frische Luft

3.)Das ätzende Geräusch zwitschernder Vögel

Wer ist online?

Mitglieder in diesem Forum: Astorek