2015-01-18 3 views
0
>>> file = open('foo.txt') 
>>> file.seek(2) 
2 
>>> file.read(1) 
'\n' 
>>> file.tell() 
4 

Почему в текущей позиции не перемещается 1 символ вперед? Разве '\n' должен быть 1 символ?Нулевой символ в текстовых файлах в Python

Содержание первых 4-х строк файла:

1 @
2 @
3 @
@

PS: Я на окнах.

+0

Вы помещаете курсор во вторую позицию, читаете символ на третьем, и он продвигается вперед, и теперь он находится на четвертой позиции. Нет? – alfasin

+0

НЕТ! для любого другого персонажа он перемещает одну позицию вперед! – Amen

+0

Пожалуйста, размещайте содержимое файла. – alfasin

ответ

4

Не пытайтесь интерпретировать значение file.tell() for a text file - это просто некоторое непрозрачное число, представляющее позицию в потоке (вы можете передать его file.seek()).

В текстовом файле file.read(1) читает один символ Юникода (код), а не байт. В зависимости от кодировки символов, используемой для чтения текстового файла, один код Unicode может быть от одного до четырех байтов (обычно).

По умолчанию действует универсальный новый режим: '\r\n', '\r', '\n' все переведены на '\n'.

Чтобы просмотреть содержимое файла в виде байтов, откройте в двоичном режиме: 'rb'. file.tell() в этом случае возвращает позицию в байтах.

b'\0' (null байт) указывает кодировку utf-16, которая является общей для Windows.

Смежные вопросы