string splitten

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
recnice
User
Beiträge: 45
Registriert: Sonntag 20. März 2011, 12:10

Hallo,
ich komme bei folgendem Problem nicht weiter:

ich lesen aus einer Datei folgenden Zeile ein

section_d_xx.key

Ich möche nun dass dieser string geteilt wird, am besten so dass section, d, xx alleine stehen, so dass ich xx durch eine mir
beliebige Zahl ersetzen kann.
Ich habe es mit der .split() Funktion versucht, hat aber nicht funktioniert.

Hat jemand von euch einen Idee??
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Ähm, ".split('_')" ?
Was genau hat denn nicht funktioniert?

Aber beim ersetzen, musst du doch nur die Werte zusammenfügen und nicht auseinander nehmen.
Zuletzt geändert von Xynon1 am Dienstag 10. Mai 2011, 08:15, insgesamt 1-mal geändert.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Rekrul
User
Beiträge: 78
Registriert: Dienstag 7. Dezember 2010, 16:23

Das beste ist du zeigst mal was du schon an Code hast und sagst wieso es nicht funktioniert. Theroetisch müsste das schon mit split() machbar sein.

Eine weitere Alternative wäre das re-Modul.
recnice
User
Beiträge: 45
Registriert: Sonntag 20. März 2011, 12:10

Hallo,
ja danke für die schnelle Antwort:

also ich hab das ganze neu durchdacht und sieht so aus:

Code: Alles auswählen

infile = "VARIANTE_III_uebung.DYN"
h = 10
infile  = open(infile)
lines = infile.read().split()
print lines

material = lines[0]

print material.replace("xx","10")
Also was ich machen möchte, ist aus dem DYN file bestimmte Werte ändern, in diesem Falle die xx. Jedoch nicht nur mit einem Wert, hier 10 sondern endlich vielen, die ich dann später aus der konsole übergeben möchte, dafür hab ich mal bis jetzt die Varibable h.
Diese kann ich aber nicht in die .replace funktion packen, da motzt python.
Gibt's da ne möglichkeit die Variable in diese Funktion reinzupacken??
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Ich glaube, dass man hier doch besser mit 're' arbeitet, immerhin müsste man '.split()' 3 x anwenden, um '_', '-' und '.' auszufiltern.

Ich würde

Code: Alles auswählen

re.findall('([a-zA-Z0-9]*)', test)
machen. Allerdings erhalte ich dann

Code: Alles auswählen

['section', '', 'd', '', 'xx', '', 'key', '']
Woher stammen die '', insbesondere das letzte?

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Was heißt, python motzt? Was sagt Dir die Fehlermeldung denn? Ich denke mal, dass Du versuchst, einen Teil aus einem string durch einen integer zu ersetzen.
Das kann natürlich nicht gehen...

Code: Alles auswählen

In [131]: test = 'foo bar xx'

In [132]: test.replace('xx', 10)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)

TypeError: expected a character buffer object

In [133]: test.replace('xx', str(10))
Out[133]: 'foo bar 10'
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
BlackJack

@mutetella: Dein Muster passt auch auf 0 Buchstaben/Ziffern, also die leere Zeichenkette. Und am Ende (und zwischen den anderen Treffern) stehen auch leere Zeichenketten. Mach aus dem '*' ein '+' und das Ergebnis sieht vielleicht schöner aus. ;-)

@recnice: Wenn Python "motzt" will es Dir etwas sagen was Du verstehen solltest. Und sage bitte auch immer was genau der Fehler ist, damit wir nicht raten müssen.

Deine Namenswahl ist nicht immer so besonders. `infile` ist keine Datei sondern ein Datei*name* und `lines` enthält nach einem `split()` sicher keine Zeilen.
recnice
User
Beiträge: 45
Registriert: Sonntag 20. März 2011, 12:10

@ mutella:

des war der Fehler! :P

Danke
Antworten