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()? Использовать регулярное выражение?
Идеи? ти, Глен
Поскольку python считывает символ обратной косой черты в качестве символа команды, чтобы получить нормальную обратную косую черту, вам нужно вместо этого использовать '\\'. Если это только один файл, к которому вы должны это сделать, возможно, стоит изменить файл, чтобы он произносил '\\ n' вместо' \ n' – sonrad10