Seite 1 von 1

.txt-file lines definiert abändern

Verfasst: Donnerstag 27. Februar 2014, 02:30
von Kerl90210
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.

Re: .txt-file lines definiert abändern

Verfasst: Donnerstag 27. Februar 2014, 08:13
von /me
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.

Re: .txt-file lines definiert abändern

Verfasst: Donnerstag 27. Februar 2014, 09:01
von 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.

Re: .txt-file lines definiert abändern

Verfasst: Donnerstag 27. Februar 2014, 12:51
von Kerl90210
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.

Re: .txt-file lines definiert abändern

Verfasst: Donnerstag 27. Februar 2014, 13:54
von /me
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.