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.
in_file = open("Datei", "r")
out_file = open("Geänderte Datei", "w")
def eingabe(zeile):
for zeile in in_file:
return(zeile)
def zuAendern(zeile):
if zeile.find("Anfang")!=-1 and zeile.find("Zusatz für Anfang")!=-1 and zeile.find('Ende')!=-1:
out_file.write(zeile)
eingabe(zeile)
elif zeile.find("Anfang")!=-1 and zeile.find("Zusatz für Anfang")!=-1:
while zeile.find('Ende')==-1:
eingabe(zeile)
zeile.strip()
out_file.write(zeile)
else:
out_file.write(zeile)
for zeile in in_file:
zuAendern(zeile)
print zeile,
out_file.close()
in_file.close()
Zuletzt geändert von madthomas am Mittwoch 8. August 2007, 13:42, insgesamt 1-mal geändert.
Stürzt er wirklich ab oder bekommst du eine Fehlermeldung?
In der letzten Zeile fehlt ein Underscore zwischen 'in' und 'file'. Wenn du den Code kopiert hast dürfte es unter Umständen daran liegen.
Du iterierst hier über die Zeilen der Datei, rufst zuAendern auf, wo eingabe aufgerufen wird, und dort wird nochmals mit for zeile in in_file über die Datei iteriert. Kein Wunder dass Python hier streikt, da würde doch jeder wahnsinnig werden
def eingabe(zeile):
for zeile in in_file:
return(zeile)
Was macht das? 1. Ist das Argument doch überflüssig, da es eh nicht gebraucht wird, 2. ist die ganze Funktion doch überflüssig, da doch nach der ganzen Iritiererrei doch eh nix bei rauskommt. Noch macht die Funktion wirklich was, noch gibt sie was zurück was aber auch nicht verarbeitet werden würde.
Zuletzt geändert von schlangenbeschwörer am Mittwoch 8. August 2007, 14:20, insgesamt 1-mal geändert.
def main():
in_file = open('Datei', 'r')
out_file = open('Geänderte Datei', 'w')
in_block = False
for line in in_file:
if 'Anfang' in line and 'Zusatz für Anfang' in line:
in_block = True
if 'Ende' in line:
in_block = False
if in_block:
line = line.strip()
out_file.write(line)
in_file.close()
out_file.close()
Je nachdem welche Zeilen "ge-stripped" werden sollen, muss man den Code in der Schleife eventuell noch ein wenig umordnen.
def main():
in_file = open('Datei', 'r')
out_file = open('Geänderte Datei', 'w')
in_block = False
for line in in_file:
if 'Anfang' in line and 'Zusatz für Anfang' in line:
in_block = True
if 'Ende' in line:
in_block = False
if in_block:
line = line.strip()
out_file.write(line)
in_file.close()
out_file.close()
Je nachdem welche Zeilen "ge-stripped" werden sollen, muss man den Code in der Schleife eventuell noch ein wenig umordnen.
Birgt einige gefahren, dadurch das in_block nicht überschrieben werden muss, kann die Variable noch den wert des letzen durchganges beinhaltetn.
def main():
in_file = open('Datei', 'r')
out_file = open('Geänderte Datei', 'w')
for line in in_file:
if 'Anfang' in line and 'Zusatz für Anfang' in line and not 'Ende' in line:
line = line.strip()
out_file.write(line)
in_file.close()
out_file.close()
Danke für die Hife nur mein Problem ist das die nächste wenn die Zeile geändert werden muss nicht immer das Ende in der nächsten Zeile ist sondern noch weitere folgen bis das ende kommt und deswegen muss ich eine schleife bauen ich weiß aber nicht wie ich das anstellen kann
def main():
in_file = open('Datei', 'r')
out_file = open('Geänderte Datei', 'w')
for line in in_file:
if 'Anfang' in line and 'Zusatz für Anfang' in line and not 'Ende' in line:
line = line.strip()
#überprüfen und tue das bis ende gefunden
line = line.strip()
out_file.write(line)
in_file.close()
out_file.close()
madthomas hat geschrieben:Danke für die Hife nur mein Problem ist das die nächste wenn die Zeile geändert werden muss nicht immer das Ende in der nächsten Zeile ist sondern noch weitere folgen bis das ende kommt und deswegen muss ich eine schleife bauen ich weiß aber nicht wie ich das anstellen kann
Ich verstehe den ganzen Absatz nicht so ganz, deshalb bitte ich um Entschuldigung für meine allgemeine Antwort zum Thema Schleifen .
Mit `for line in in_file` hast du schon eine for-Schleife, aber so könnten andere Schleifen aussehen:
def main():
in_file = open('Datei', 'r')
out_file = open('Geänderte Datei', 'w')
for line in in_file:
if 'Anfang' in line and 'Zusatz' in line and not 'Ende' in line:
line = line.strip()
while not ');' in line:
line = line.strip()
out_file.write(line)
in_file.close()
out_file.close()
def main():
in_file = open('Datei', 'r')
out_file = open('Geänderte Datei', 'w')
in_block = False
for line in in_file:
if 'Anfang' in line and 'Zusatz für Anfang' in line:
in_block = True
if 'Ende' in line:
in_block = False
if in_block:
line = line.strip()
out_file.write(line)
in_file.close()
out_file.close()
Je nachdem welche Zeilen "ge-stripped" werden sollen, muss man den Code in der Schleife eventuell noch ein wenig umordnen.
Birgt einige gefahren, dadurch das in_block nicht überschrieben werden muss, kann die Variable noch den wert des letzen durchganges beinhaltetn.
Das ist keine Gefahr das soll und muss so sein. Es soll nicht jede Zeile einzeln betrachtet werden, sondern alle Zeilen zwischen "Anfang" und "Ende" verarbeitet werden, da muss man sich also merken ob man sich gerade in einem Block, zwischen Anfang und Ende, befindet oder nicht.
@maddthomas: Na dann funktioniert mein Beispiel doch fast. Man muss nur nach dem `strip()`en noch ein Leerzeichen anhängen sonst kleben die Worte an den ehemaligen Zeilenübergängen aneinander.
DatenMetzgerX hat geschrieben:
Birgt einige gefahren, dadurch das in_block nicht überschrieben werden muss, kann die Variable noch den wert des letzen durchganges beinhaltetn.
Ich glaube, das ist hier das erwünschte Verhalten.
Ansonsten wäre es hilfreich, wenn uns madthomas mal ein Beispiel
seiner Daten postet.
so hab jetzt die Version von BlackJack genommen und sie funktioniert.
brauchte kein Leerzeichen einzufügen sie nächsten Zeilen mit Leerzeichen beginnen und der löscht alle bis auf 1.
class Zeile:
def zuAendern(self, line, in_block):
if 'Anfang' in line and 'Zusatz' in line:
in_block = True
if 'Ende' in line:
in_block = False
if in_block:
line=line.strip()
return(line)
in_file = open("Datei", "r")
out_file = open("GeänderteDatei", "w")
Z = Zeile()
in_block = False
for line in in_file:
line = Z.zuAendern(line, in_block)
out_file.write(line)
in_file.close()
out_file.close()
Hab noch so meine Probleme mit den Klassen kann mir einer sagen was da falsch ist
madthomas hat geschrieben:@mkallas reicht dir das bsp. oben nicht
Doch, leider haben sich unsere beiden Einträge ins Forum zeitlich überschnitten.
Hättest du das Beispiel direkt gebracht, hätte sich keiner den Kopf darüber zerbrechen müssen.