является ли новая строка "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']
обратите внимание, что это только удаляет пробелы в конце строк.