2016-06-04 16 views
0

G'day alle, Ich habe eine Textdatei, die von Kommentarfeld eines geografischen Informationssystemen (GIS) app (Name zurückgehalten) extrahiert. Ich muss diesen Text analysieren und einen schönen Bericht erstellen. Der Text hat einzelne Zeilen, die mit Wagenrücklauf/Zeilenvorschub (x0D/x0A) abgeschlossen sind. Einige der Zeilen enthalten jedoch eine neue Zeile im Textkörper. Nicht sicher, wie das passiert. Ursache ist irrelevant. Ich muss nur handeln. Mein Text sieht wie folgt aus (Daten verändert, aber grundlegende Idee gleich) -Python EOL Ausgabe in Textdatei

dies Linie 01
diese Linie 02
ist diese Linie 03
ist und es enthält eine neue Zeile nach der 03 Zeichen String
diese Linie 04

ich kann die Textdatei korrekt in diesem Beitrag darstellen, weil mein Schnitt und Post wird die CR/LFs aus Strippen, aber es ist CR/LF nach jeder „Zeile 0?“ Zeichenfolge. Dieser Post-Mechanismus erlaubt das Anhängen von Dateien nicht, oder ich würde diese kurze Textdatei anhängen. Ich brauche jede ganze Zeile bis zu CR/LF zu lesen und ausdrucken. Zeilen 1 und 2 drucken OK. Linie 3 druckt bis zum ersten 03. Also, wenn ich lesen Sie diese mit dem folgenden Ausschnitt -

import sys 
import os 

if __name__ == '__main__': 

    if sys.version_info >= (3, 0): 
     print ("script: EOL_Python_test.py"); 
     print ("Python version: " + str(sys.version_info)); 
     # vars 
     input_file = r"EOL_test_file.txt"; 
     input_data_line = ""; 
     line_number = 0; 
     output_line = ""; 
     # end vars def 

     if os.path.isfile(input_file): 
      output_line = "processing file: " + input_file + "\n"; 
      print (output_line); 
      original_file = open(input_file) 
      input_data_line = original_file.readline().strip("\r\n") 
      while input_data_line != "": 
       line_number = line_number + 1; 
       output_line = "line #:" + str(line_number) + " " + \ 
        str(input_data_line); 
      print (output_line) 
      input_data_line = original_file.readline().strip("\r\n") 
      # regex for replacing EOL with newline? "\r\n?|\n" 
      original_file.close(); 
    else: 
     print ("must run on Python 3+, now exiting..."); 
     exit; 

alles druckt OK mit Ausnahme der 3. und 4. Zeile. Zeile 3 druckt die 3. Zeile bis zum Zeilenende. Zeile 4 druckt den Rest der 3. Zeile. Das Programm fährt dann fort, fügt der Zeilenzählvariablen eine zusätzliche Zeile hinzu und druckt natürlich eine zu viele Zeilen.

Also ... warum tut Python Pause sowohl auf der Neue-Zeile und der carraige Rückkehr/Newline Combo, wenn eine Textdatei zu lesen? Gibt es eine Möglichkeit ich das Newline entfernen, bevor ich die Leseleitungen() aufrufen ausgeben? Verwenden Sie eine Regex?

Ideen? ty, Glen

+0

Da Python liest das Backslash Symbol als Befehlssymbol, einen normalen Schrägstrich zu bekommen, Sie '' \\ stattdessen verwenden müssen. Wenn es nur eine Datei ist, müssen Sie dies tun, es kann sich lohnen, die Datei bearbeiten, so dass er sagt '\\ n 'statt' \ n ' – sonrad10

Antwort

1

Sie können versuchen, eine Zeichenfolge aus einer ganzen Datei zu machen und teilen Sie es dann durch ‚\ r \ n‘:

input_data = original_file.read().split('\r\n') 
for line in input_data: 
    ... 

Aber denken Sie daran, es ist nicht eine effiziente Methode für große Dateien.