.txt-file lines definiert abändern

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
Kerl90210
User
Beiträge: 7
Registriert: Donnerstag 19. Dezember 2013, 21:30

Hallo miteinander,

im vorliegenden Fall möchte ich eine .txt - File bearbeiten,
welche die Zeilen, welche das Wort NoValue enthalten,
diese ausblenden.
Vorgehensweise bisher war wie folgt:

Code: Alles auswählen

import sys
with open('Welle_fueg.txt',"r")as Einlesen:
    with open('Welle_fueg_neu.txt',"w") as Schreiben:
# Schleife
            for line in Einlesen:
                s = line.strip()
                if s != "":
# Start  
                    if s == ('NoValue'):
                        print 'löschen'
                        
                    elif s != ('NoValue'):
                        Schreiben.write(s)
                        Schreiben.write("\n")
            print 'Fertig'
Nur bringt das nichts, da die Zeilen wie folgt grundsätzlich aufgebaut sind:
4.39076E-001 NoValue NoValue NoValue -3.88220E+001
4.46874E-001 -1.00612E+002 -3.37663E-002 -9.62620E-005 -3.87581E+001
...

Wer kann mir bei meinem Problem helfen?

Vielen Dank im Voraus.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Kerl90210 hat geschrieben:Hallo miteinander,

im vorliegenden Fall möchte ich eine .txt - File bearbeiten,
welche die Zeilen, welche das Wort NoValue enthalten,
diese ausblenden.
Wenn du nur überprüfen möchtest, ob "NoValue" irgendwo in der Zeile vorkommt, dann bietet sich der in-Operator an.

Code: Alles auswählen

with open('Welle_fueg.txt',"r") as einlesen:
    with open('Welle_fueg_neu.txt',"w") as schreiben:
        for line in einlesen:
            if not 'NoValue' in line
                schreiben.write('{0}\n'.format(line))
Folgendes müsste auch gehen (ungetestet):

Code: Alles auswählen

with open('Welle_fueg.txt',"r") as einlesen:
    with open('Welle_fueg_neu.txt',"w") as schreiben:
        schreiben.writelines(line for line in lesen if not 'NoValue' in line)
Ich habe dem Style Guide for Python Code folgend die Bezeichnernamen in Kleinbuchstaben geschrieben.
BlackJack

@Kerl90210: /me hat ja schon die Schreibweise der Namen angepasst, aber bei den Namen für die Dateiobjekte sollte man noch mal über den Namen selbst sprechen: `einlesen` und `schreiben` sind passende Namen für Funktionen, weil sie eine Tätigkeit beschreiben. Also sowohl die Namen als auch Funktionen. Aber für Dateiobjekte sind sie eher nicht geeignet. Ganz generisch wäre zum Beispiel `in_file` oder `lines` für die Eingabedatei passend und `out_file` für die Ausgabedatei.
Kerl90210
User
Beiträge: 7
Registriert: Donnerstag 19. Dezember 2013, 21:30

Hallo,

vielen Dank @ BlackJack & /me für die raschen Antworten.
Klappt hervorragend!

Code schaut jetzt wie folgt aus:

Code: Alles auswählen

import sys
def main():
    with open('Welle_fueg.txt',"r")as Einlesen:
        with open('Welle_fueg_neu.txt',"w") as Schreiben:
            for line in Einlesen:
                if not 'NoValue' in line:
                    Schreiben.write('{0}'.format(line))
                else:
                    print ('Fehler')
print ('Fertig')
@ BlackJack: Habe die Bezeichnungen so gewählt, wie ich sie bei anderen Konvertierungen auch gebrauche, um mir eine gewisse Algorithmik zu verschaffen. Schaut sicherlich für jemand Geübten furchtbar aus, aber ich komme damit gut zurecht.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Kerl90210 hat geschrieben:

Code: Alles auswählen

[...]
                    Schreiben.write('{0}'.format(line))
[...]
Das wäre das gleiche wie

Code: Alles auswählen

                    Schreiben.write(line)
Ich hatte in dem Template-String noch ein \n um einen Zeilenumbruch zu erzeugen.
Antworten