Zeilen anhängen bis Ende gefunden wird

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.
madthomas
User
Beiträge: 35
Registriert: Dienstag 7. August 2007, 10:32
Wohnort: WND
Kontaktdaten:

Zeilen anhängen bis Ende gefunden wird

Beitragvon madthomas » Mittwoch 8. August 2007, 13:12

Hallo ich muss ein Programm schreiben welches ein Datei einliest und
diese nach bestimmten Kriterien überprüft

hab das mal jetzt so versucht aber er stürzt immer ab

Code: Alles auswählen

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.
Benutzeravatar
tromai
User
Beiträge: 92
Registriert: Mittwoch 26. April 2006, 11:20

Beitragvon tromai » Mittwoch 8. August 2007, 13:20

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.
madthomas
User
Beiträge: 35
Registriert: Dienstag 7. August 2007, 10:32
Wohnort: WND
Kontaktdaten:

Beitragvon madthomas » Mittwoch 8. August 2007, 13:22

IDLE von Python stürtz ab und die cmd auch

Nein da fehlt keiner den sieht man nur schlecht und er würde es ja melden
Benutzeravatar
tromai
User
Beiträge: 92
Registriert: Mittwoch 26. April 2006, 11:20

Beitragvon tromai » Mittwoch 8. August 2007, 13:26

Ok, sorry. Er wird bei mir nicht angezeigt.
madthomas
User
Beiträge: 35
Registriert: Dienstag 7. August 2007, 10:32
Wohnort: WND
Kontaktdaten:

Beitragvon madthomas » Mittwoch 8. August 2007, 13:42

Jetzt müsste er aber zu sehen sein
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Mittwoch 8. August 2007, 13:48

Code: Alles auswählen

for zeile in in_file:
    zuAendern(zeile)

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 :)
madthomas
User
Beiträge: 35
Registriert: Dienstag 7. August 2007, 10:32
Wohnort: WND
Kontaktdaten:

Beitragvon madthomas » Mittwoch 8. August 2007, 13:51

Ok da hast du wohl recht aber gibt ein möglichkeit dem Programm zu sagen das er die nächste Zeile anhängt und die nochmal überprüft
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Re: Zeilen anhängen bis Ende gefunden wird

Beitragvon schlangenbeschwörer » Mittwoch 8. August 2007, 14:17

Hi!
madthomas hat geschrieben:

Code: Alles auswählen

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.
Benutzeravatar
tromai
User
Beiträge: 92
Registriert: Mittwoch 26. April 2006, 11:20

Beitragvon tromai » Mittwoch 8. August 2007, 14:19

Ich hoffe, dass ich richtig verstanden habe, aber wenn du über das File iterieren willst, dann mach es doch so:

Code: Alles auswählen

for zeile in in_file:
   if zeile == blablabla:
      mache irgendwas
      continue
   elif zeile == blablöbla:
      mache irgendwas anderes
      continue
   else:
      mache irgendwas ganz anderes
      break
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Mittwoch 8. August 2007, 14:54

@tromai: Die continue- und break-Statements in deinem Beispiel sind überflüssig.
Benutzeravatar
tromai
User
Beiträge: 92
Registriert: Mittwoch 26. April 2006, 11:20

Beitragvon tromai » Mittwoch 8. August 2007, 14:55

Öhm, das passiert wenn man in Eile ist und trotzdem helfen will.
Ist natürlich Quark. :oops: :oops: :oops:
BlackJack

Beitragvon BlackJack » Mittwoch 8. August 2007, 15:32

@madthomas: Was heisst IDLE stürzt ab? Wie äussert sich das?

Wenn ich mal raten müsste suchst Du so etwas:

Code: Alles auswählen

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.
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Beitragvon DatenMetzgerX » Mittwoch 8. August 2007, 21:54

BlackJack hat geschrieben:@madthomas: Was heisst IDLE stürzt ab? Wie äussert sich das?

Wenn ich mal raten müsste suchst Du so etwas:

Code: Alles auswählen

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.


Code: Alles auswählen

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()
madthomas
User
Beiträge: 35
Registriert: Dienstag 7. August 2007, 10:32
Wohnort: WND
Kontaktdaten:

Beitragvon madthomas » Donnerstag 9. August 2007, 06:32

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

Code: Alles auswählen

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()

Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Beitragvon Sr4l » Donnerstag 9. August 2007, 08:33

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:

Code: Alles auswählen

for x in range(5):
   print x

i = 0
while i < 20:
    print i
    i += 1

Wer ist online?

Mitglieder in diesem Forum: __deets__, Google [Bot], schurmak, snafu