2016-06-04 5 views
0

G'day all, У меня есть текстовый файл, который был извлечен из поля комментариев приложения Geographic Information Systems (GIS) (имя не указано). Мне нужно разобрать этот текст и составить хороший отчет. Текст имеет отдельные строки, которые заканчиваются возвратом каретки/линией перевода (x0D/x0A). Однако некоторые строки содержат новую строку в тексте. Не знаю, как это происходит. Причина не имеет значения. Мне просто нужно иметь дело. Мой текст выглядит следующим образом (данные изменились, но основная идея та же) -Проблема Python EOL в текстовом файле

это линия 01
это линия 02
это линия 03
и содержит строку после 03 символа строка
это строка 04

Я не могу представить текстовый файл правильно в этой должности, потому что мой крой и пост раздевая CR/ЛФ вне, но есть CR/LF после каждой «линии 0?» строка. Этот механизм публикации не позволяет прикреплять файлы, или я бы приложил этот короткий текстовый файл. Мне нужно прочитать каждую строку до CR/LF и распечатать ее. Линии 1 и 2 печатать OK. линия 3 печатает до первого 03. Так что, когда я прочитал это с помощью следующего фрагмента кода -

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; 

все, печатает OK, за исключением 3-й и 4-й линии. Строка 3 печатает 3-ю строку до новой строки. Строка 4 печатает оставшуюся часть третьей строки. Затем программа продолжит работу, добавив дополнительную строку к переменной счетчика строк и, конечно, напечатав слишком много строк.

Итак ... почему Python ломает как новую строку, так и комманду carraige return/newline при чтении текстового файла? Есть ли способ удалить новую строку, прежде чем я выйду вызов readlines()? Использовать регулярное выражение?

Идеи? ти, Глен

+0

Поскольку python считывает символ обратной косой черты в качестве символа команды, чтобы получить нормальную обратную косую черту, вам нужно вместо этого использовать '\\'. Если это только один файл, к которому вы должны это сделать, возможно, стоит изменить файл, чтобы он произносил '\\ n' вместо' \ n' – sonrad10

ответ

1

Вы можете попробовать сделать строку из целого файла, а затем разделить его на «\ г \ п»:

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

Но помните, что это не самый эффективный метод для больших файлов.

 Смежные вопросы

  • Нет связанных вопросов^_^