Проблема Python EOL в текстовом файле

Добрый день, у меня есть текстовый файл, извлеченный из поля комментариев приложения географических информационных систем (ГИС) (имя не разглашается). Мне нужно проанализировать этот текст и создать красивый отчет. Текст состоит из отдельных строк, которые заканчиваются возвратом каретки/переводом строки (x0D/x0A). Однако некоторые строки содержат новую строку в теле текста. Не уверен, как это происходит. Причина не имеет значения. Мне просто нужно разобраться. Мой текст выглядит так (данные изменились, но основная идея та же) --

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

Я не могу правильно представить текстовый файл в этом посте, потому что моя вырезка и пост удаляют CR / LF, но после каждой «строки 0?» есть CR / LF. нить. Этот механизм публикации не позволяет прикреплять файлы, иначе я бы прикрепил этот короткий текстовый файл. Мне нужно прочитать каждую строку целиком до 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;

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

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

Идеи? Тай, Глен


person doojinsi    schedule 04.06.2016    source источник
comment
Поскольку python читает символ обратной косой черты как символ команды, чтобы получить обычную обратную косую черту, вам нужно использовать \` instead. If it is only one file you have to do this to, it may be worth editing the file so that it says \\n` вместо \n   -  person sonrad10    schedule 05.06.2016


Ответы (1)


Вы можете попытаться сделать строку из целого файла, а затем разделить ее на '\r\n':

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

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

person pmiara    schedule 04.06.2016