является ли новая строка "n " 2 символа или 1 символ

так у меня есть файл.txt:

>>012345
>> (new line)

когда я звоню:

b=a.read(7)
print b

это даст мне

 012345
 (with a newline here)

Итак, я вижу, что он прочитал следующие 7 символов, считая "n" как один символ. Но когда я использую seek, кажется, что он рассматривает "n " как два символа:

position = a.seek(-2,2)
b=a.read(1)
print b

печатает новую пустую строку вместо 5.

эти 2 метода лечения"n" по-другому?

2 ответов


Python открывает файлы в текстовом режиме по умолчанию. Файлы, открытые в текстовом режиме, имеют собственные соглашения новой строки платформы, переведенные на \n автоматически.

вы открыли файл с помощью \r\n соглашение о новой строке, скорее всего, в Windows.

открыть файл в бинарном режиме, если вы не хотите, чтобы этот перевод состоялся. См. документацию open() функции для получения более подробной информации:

по умолчанию использовать текстовый режим, который может конвертировать '\n' символы для представления конкретной платформы при записи и обратно при чтении. Таким образом, при открытии двоичного файла, вы должны добавить 'b' к значению режима, чтобы открыть файл в двоичном режиме, что улучшит переносимость.


вы не должны иметь дело с этим самостоятельно. Python поставляется с батареями в комплекте. :-)

если новые строки беспокоят вас, просто read() весь файл и использовать splitlines() метод для строк;

In [21]: test = 'foo \nbar bla\n baz\r\n'

In [22]: test.splitlines()
Out[22]: ['foo ', 'bar bla', ' baz']

обратите внимание, что это только удаляет пробелы в конце строк.