Buffer bereinigen (mehrfach If-Bedingung?)

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
keboo
User
Beiträge: 132
Registriert: Sonntag 19. Februar 2006, 14:03

Samstag 25. März 2006, 14:56

Hallo!
Ich möchte aus einem Buffer alle Zeilen, ausser einige, in welchen keine angegebenen Zeichen sich befinden in eine Datei auslesen.

Dazu mein Code:

Code: Alles auswählen

out_b=file('out_b.txt','w')

for i in range(len(buffer)):
      if buffer[i].find('<') is -1:
             out_b.write(buffer[i].strip())
             out_b.write('\n')

out_b.close
Der Code funktioniert. Ich möchte aber neben dem Zeichen '<' auch Zeilen mit dem zeichen '!' aus meiner Zieldatei verschwinden lassen. Wie muss ich meine If-Bedingung umbauen, damit das geht. Mit or hab ich es nicht geschafft. Das dürfte anscheinend in Python anders gehen.

Bitte um kurze Hilfe,

Danke.
Johannes
Benutzeravatar
Hannes-Spz
User
Beiträge: 123
Registriert: Sonntag 7. August 2005, 22:42

Samstag 25. März 2006, 16:08

cool, nen namensvetter - na den kann ich doch nicht dumm sterben lassen :wink:

ok, sagen wirs mal so, ich hätte es ohne den buffer gemacht, aber damit kenn ich mich
nicht so gut aus...

Code: Alles auswählen

from string import replace
zk = "Hallo! ich bin ein < zeichen!..."
for i in "!<": zk = replace(zk, i, "")
er geht zweimal durch die i-schleife durch und ersetzt alle zeichen, die dem momentanen wert von i
entsprechen durch ein 'nichts' (vl. auch ein 'absolut-nichts') - eine leere zeichenkette...
ich weiß aber leider nicht, wie du das auf deinen buffer anwenden kannst
*überfragt-sei*

ansonsten:
[size=85]"Unsere Situation ist immer die eines schwarzen Mannes der in einem schwarzen Keller einen schwarzen Hut sucht, den es vielleicht gar nicht gibt." Sir Karl R. Popper[/size]
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Samstag 25. März 2006, 16:25

keboo hat geschrieben:

Code: Alles auswählen

out_b=file('out_b.txt','w')

for i in range(len(buffer)):
      if buffer[i].find('<') is -1:
             out_b.write(buffer[i].strip())
             out_b.write('\n')

out_b.close
Hi Johannes!

Vorab eine Info, die uns beim Beantworten das Leben leichter macht:
Wenn irgendwie möglich --> bitte immer **lauffähige** Codebeispiele posten.

Warum? Je nachdem was für ein Typ dieser "buffer" ist, kann man mit verschiedensten Methoden arbeiten. Wenn du uns aber verschweigst, was überhaupt dein "buffer" ist, dann können wir nur raten.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Samstag 25. März 2006, 16:43

Möglichkeit 1:

Code: Alles auswählen

f_out = file("out_b.txt", "w")

buffer = [
    "< Zeile 1",
    "Zeile 2",
    "! Zeile 3",
]

for line in buffer:
    if (line.find("<") == -1) and (line.find("!") == -1):
        f_out.write(line.strip() + "\n")

f_out.close()
Diese Methode ist aber nur dann ratsam, wenn sich die Anzahl der zu suchenden Zeichen nicht großartig erhöht.

Wenn du vor hast, nicht nur nach diesen Zeichen zu filtern, dann würde ich es anders lösen, da sonst zu viele IF-Bedingungen im Spiel wären.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Samstag 25. März 2006, 16:45

Hi

suchst du einfach eine AND-Verknüpfung?

Code: Alles auswählen

out_b=file('out_b.txt','w')

for i in range(len(buffer)):
      if buffer[i].find('<') == -1 AND buffer[i].find('!') == -1:
             out_b.write(buffer[i].strip())
             out_b.write('\n')

out_b.close
Gruss
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 25. März 2006, 18:20

Ich hätte es ja so ähnlich wie Hannes-Spz gemacht, aber dazu die Objektmethoden des Strings verwendet:

Code: Alles auswählen

zk = "Hallo! ich bin ein < zeichen!..."
for i in "!<": 
    zk = zk.replace(i, "")
My god, it's full of CARs! | Leonidasvoice vs Modvoice
keboo
User
Beiträge: 132
Registriert: Sonntag 19. Februar 2006, 14:03

Sonntag 26. März 2006, 12:29

Danke für eure hilfreichen Antworten!

Werde das nächste mal nur lauffähigen Code posten.

Danke,

JOhannes
Antworten