2017-07-17 2 views
0

Ich habe eine Testdatei mit vielen Zeilen. Ich möchte Zeilen mit einem bestimmten Anfangs- und Endezeichen löschen.So löschen Sie bestimmte Zeilen einer Datei, die mit bestimmten Zeichen beginnt und endet

hier ist mein Code:

with open('test.txt', 'r') as f, open('output.txt', 'w') as out: 
    for i, line in enumerate(f): 
     if (line.startswith('E3T') and line.endswith('3')): 
      out.write(line) 
     elif (line.startswith('E4Q') and line.endswith('3')): 
      out.write(line) 
     elif (line.startswith('E4Q') and line.endswith('4')): 
      out.write(line) 
     elif (line.startswith('E4Q') and line.endswith('3')): 
      out.write(line) 
     elif line.startswith('BC'): 
      break 

dies meine test.txt Datei ist

E3T 1 2 1 3 3 
E3T 2 4 2 5 1 
E3T 3 3 5 2 4 
E3T 3326 2001 2008 1866 10 
E4Q 3327 1869 2013 2011 1867 9 
E4Q 3328 1867 2011 2012 1868 8 
E4Q 3329 1870 2014 2013 1869 4 
E3T 8542 4907 4908 4760 5 
E3T 8543 4768 4909 4761 9 
E3T 8544 4909 4763 4761 6 
E3T 17203 9957 9964 10161 3 
E3T 17204 9957 10161 9959 2 
BC 1 "Zulauf: Temperatur" 12 0 1 "HYDRO_WT-2D" 
BC_DEF 12 1 "Temperatur [°C]" 5 "Zeit [s]" "Temperatur [°C]" 

Und die Ausgabe wie folgt sein sollte:

E3T 1 2 1 3 3 
E3T 3 3 5 2 4 
E4Q 3329 1870 2014 2013 1869 4 
E3T 17203 9957 9964 10161 3 

Ich denke, es tut wegen der Räume nicht arbeiten. Gibt es irgendeine pythonische Art, dies zu tun, oder muss ich die Zeilen aufteilen und dann die ersten und letzten Zeichen vergleichen?

Antwort

1

Wenn Sie eine Zeile auf diese Weise lesen, gibt es entweder eine neue Zeile oder eine Zeile mit Zeilen-/Zeilenvorschub am Ende, die normalerweise für Sie "unsichtbar" ist. Sie müssen sich damit irgendwie befassen, sonst wird endswith es eher verarbeiten als das Zeichen, das Sie verarbeiten möchten. Wenn Sie dann eine Zeile ausgeben, müssen Sie das Zeichen für die neue Zeile zurückgeben.

with open('test.txt', 'r') as f, open('output.txt', 'w') as out: 

    for i, line in enumerate(f): 
     line = line.strip() 
     if (line.startswith('E3T') and line.endswith('3')): 
      out.write(line+'\n') 
     elif (line.startswith('E4Q') and line.endswith('3')): 
      out.write(line+'\n') 
     elif (line.startswith('E4Q') and line.endswith('4')): 
      out.write(line+'\n') 
     elif (line.startswith('E4Q') and line.endswith('3')): 
      out.write(line+'\n') 
     elif line.startswith('BC'): 
      break 

In diesem Fall habe ich strip zu verwerfen Leerraum am Anfang und Ende jeder Zeile verwendet. Dies ist ein sehr primitiver Ansatz. Es wäre besser zu verwenden,

line = line.rstrip() 

, die Leerzeichen von nur dem rechten Ende einer Zeichenfolge entfernt.

EDIT, in Antwort auf die Frage in einem Kommentar:

Ersetzen Sie die letzte Zeile oben mit diesen Zeilen,

out.write(line+'\n') 
else: 
    continue 
+0

Sie für die Lösung danken! Was soll ich tun, wenn ich den Rest der Zeilen schreiben will und nicht breche! Das bedeutet, dass der Rest der Datei genauso wie die Eingabedatei sein sollte! –

+0

Siehe Bearbeiten. –

Verwandte Themen