Файл чтения Python, определенный разделителем \ r \ n - PullRequest
0 голосов
/ 25 мая 2018

Я хотел бы прочитать файл, определенный только разделителем новой строки \ r \ n, \ r и \ n должны рассматриваться как часть строки, а не как конец строки.

Я пытался использовать

open('file.txt', 'rU').read().split('\r\n')

но после открытия файла я не вижу символа \ r, поэтому, вероятно, мне нужно открыть файл с другим флагом или другим способом.

Есть идеи, как решить проблему?

РЕДАКТИРОВАТЬ: извините за не указание версии Python, я использую версию 3.

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

Я думаю, что \ r \ n переводится в \ n при чтении файла в текстовом режиме.

Я не уверен на 100%, чего вы хотите достичь, но мне кажется, что вы хотитеделать:

with open("file.txt", "rU") as f:
    return f.readline()

Это будет читать одну строку (включая \ n).Если вы хотите строки в виде списка:

with open("file.txt", "rU") as f:
    return f.readlines()

Или вы можете просто перебрать f.

0 голосов
/ 25 мая 2018

простой ответ (в двоичном режиме) прекрасно работает в Python 2, но требует адаптации в Python 3, поскольку при открытии файла в двоичном виде его содержимое возвращается как bytes, больше не str.

Также, если файл большой, факт чтения всего файла может быть проблемой с точки зрения памяти.

В Python 3 вы можете передать параметр newline в open, поэтомувместо этого используется значение по умолчанию.

with open("temp.txt","r",newline="\r\n") as f:
    for line in f:
       ....

line содержит текст плюс \r\n в конце (используйте line = line.rstrip() для удаления).

Если есть \n символов в строке (не после \r), они читаются как обычный символ.

0 голосов
/ 25 мая 2018

Откройте файл с помощью 'rb':

open('file.txt', 'rb').read().split('\r\n')

Мне было немного сложно создать текстовый файл только с CR и только LF, но Notepad ++ помог мне.

С этим содержанием:

CRLF\r\nCR\rLF\nCRLF\r\n

с использованием print open('file.txt', 'rb').read().split('\r\n')

Я получил этот вывод:

['CRLF', 'CR\rLF\nCRLF', '']

...